C#中double型如何转成int型,小数部分四舍五入到整数?

wangtong2010 2010-05-24 01:04:09
例如3.3在转成整数时为3,-3.8在转成整数时为-4。
...全文
39578 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
无涯大者 2011-12-29
  • 打赏
  • 举报
回复
Math.Round(0.5,MidpointRounding.AwayFromZero) 貌似正解...
ttusertt 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 panderpeople 的回复:]
Convert.ToInt32(-3.8)这是很万能的转换!
[/Quote]

Convert.ToInt32 采用的是四舍六入五成双的方法处理小数的,所以某些时候会有问题的。


Convert.ToInt32(3.5); //4
Convert.ToInt32(-3.5); //-4
Convert.ToInt32(4.5); //4
Convert.ToInt32(-4.5); //-4
lijavasy 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 panderpeople 的回复:]
Convert.ToInt32(-3.8)这是很万能的转换!
[/Quote]
right
加油馒头 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wangtong2010 的回复:]
请回答我的问题。
[/Quote]

都说成这样了。。还没找到答案?

//四舍五入
Math.Round(0.5,MidpointRounding.AwayFromZero)

这样就可以了
wangtong2010 2010-05-25
  • 打赏
  • 举报
回复
请回答我的问题。
PanderPeople 2010-05-24
  • 打赏
  • 举报
回复
Convert.ToInt32(-3.8)这是很万能的转换!
antony1029 2010-05-24
  • 打赏
  • 举报
回复
学习啊。
myhope88 2010-05-24
  • 打赏
  • 举报
回复
路过,帮顶下
vrhero 2010-05-24
  • 打赏
  • 举报
回复
对了,还要补充一下...这个MidpointRounding.AwayFromZero枚举现在已经变成四舍五入算法了,那个解释已经不通了...
vrhero 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 chopper7278 的回复:]
msdn对AwayFromZero的解释: 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。
这个...想不出来了哦...
[/Quote]
这句话你想不出来很正常,因为这是MSDN中文译版的一个错误,始终没改正...
vrhero 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 chopper7278 的回复:]
引用 13 楼 wuyazhe 的回复:
貌似地球人都知道的,呵呵。多谢楼上2位。补课了。

岂敢, wuyazhe兄 能不能帮我去看看msdn对MidpointRounding.AwayFromZero的解释 我实在不解阿... 现在主要都没时间去看了 拿出来大家讨论下看看

msdn对AwayFromZero的解释: 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值……
[/Quote]
这叫银行家舍入法...可看一下我在近3年前写的老文章...

http://blog.csdn.net/vrhero/archive/2007/07/29/1714889.aspx
gohappy2008 2010-05-24
  • 打赏
  • 举报
回复
Math.Round
taikonhmao67 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 yhb417 的回复:]
C# code

double a = 2.3;
double b = 4.5;
Response.Write("a:"+a.ToString("0")+"<br>");
Response.Write("b:"+b.ToString("0"));

------------
a:2
b:5
[/Quote]

大哥 你这个 怎么算出来的?
修改一下昵称 2010-05-24
  • 打赏
  • 举报
回复

double a = 2.3;
double b = 4.5;
Response.Write("a:"+a.ToString("0")+"<br>");
Response.Write("b:"+b.ToString("0"));

------------
a:2
b:5
deknight 2010-05-24
  • 打赏
  • 举报
回复
一般是采取0.5的做法,还有就是4舍6入
快乐乔巴 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wuyazhe 的回复:]
貌似地球人都知道的,呵呵。多谢楼上2位。补课了。
[/Quote]
岂敢, wuyazhe兄 能不能帮我去看看msdn对MidpointRounding.AwayFromZero的解释 我实在不解阿... 现在主要都没时间去看了 拿出来大家讨论下看看

msdn对AwayFromZero的解释: 当一个数字是其他两个数字的中间值时,会将其舍入为两个值中绝对值较小的值。
这个...想不出来了哦...
Taiyangchen 2010-05-24
  • 打赏
  • 举报
回复
学习学习了!
快乐乔巴 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 skep99 的回复:]
Math.Round实现的是banker舍入法

http://hi.baidu.com/frwl/blog/item/eb64c39537ab7f4fd0135e20.html
[/Quote]
以前我也碰到这个问题 虽然知道了Math.Round(0.5,MidpointRounding.AwayFromZero)来解决,但是MidpointRounding.AwayFromZero里面是如何算的 我还没搞清楚 我还写了一片文章总结下 但MidpointRounding.AwayFromZero的MSDN中的解释令我很难理解(没空去研究了),结果写了一半就搁置在哪了 兄弟是否能去研究下看看
http://blog.csdn.net/chopper7278/archive/2008/12/02/3429388.aspx
兔子-顾问 2010-05-24
  • 打赏
  • 举报
回复
貌似地球人都知道的,呵呵。多谢楼上2位。补课了。
快乐乔巴 2010-05-24
  • 打赏
  • 举报
回复
不能直接调用Math.Round方法的,这可和Java的不一样哦

Math.Round这个函数的解释是将值按指定的小数位数舍入,并不就是四舍五入。这种舍入有时称为就近舍入或四舍六入五成双

Math.Round(0.4)  //result:0 
Math.Round(0.6) //result:1
Math.Round(0.5) //result:0
Math.Round(1.5) //result:2
Math.Round(2.5) //result:2
Math.Round(3.5) //result:4
Math.Round(5.5) //result:6
Math.Round(6.5) //result:6
Math.Round(8.5) //result:8
Math.Round(9.5) //result:10


可以看出 并不是四舍五入的
其实在 VB, VBScript, C#, J#, T-SQL 中 Round 函数都是采用 Banker's rounding(银行家舍入)算法,即四舍六入五取偶。事实上这也是 IEEE 规定的舍入标准。因此所有符合 IEEE 标准的语言都应该是采用这一算法的。

请调用 Math.Round(Decimal, MidpointRounding) 重载!~哦,原来还有重载的方法可用,MidpointRounding在两个数字之间时如何舍入的规范,规范MidpointRounding中它有2个成员,一个是ToEven还有个是AwayFromZero。

//四舍五入  
Math.Round(0.5,MidpointRounding.AwayFromZero)






加载更多回复(11)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧