Math.Round(1060.235, 2, MidpointRounding.ToEven)为什么是1060.23? 四舍五入也有个国际惯例,叫奇进偶舍,意思是当舍入位前面一位是奇数时,就进,为偶数时,就舍,这也是体现公平性的原理。可是国际惯例往往在国内很多企业行不通,为了应付他们的要求,采用Math.Round(price,2,MidpointRounding.AwayFromZero)就可以了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 double d1 = Math.Round(1060.235, 2); //d1 = 1060.23double d2 = Math.Round(1060.235, 2, MidpointRounding.ToEven); //d2 = 1060.23 double d1 = Math.Round(1060.235+0.005, 2); //这样应该是没问题的吧 老外的那叫四舍六入不叫四舍五入…如果舍入位为5则看前面一位数,前面一位数如果为偶数则舍入,为奇数则进。小数点后的算法目测还受小数点后第一位数的奇偶影响,MidpointRounding选哪个都无法影响你这个数的四舍五入结果,不过把小数点后的2改成3就行了…具体算法都是参照 Banker's rounding http://www.cnblogs.com/love-summer/archive/2011/10/28/2227265.html博客园这里有个示例文章,不过这篇没测试小数位后多位数的问题。 http://www.ituring.com.cn/article/35304 这里也有篇参考,看来还比较复杂…… MidpointRounding.ToEven 这是IEEE的“四舍五入”。舍位小于等于四的时候,不进位。舍位等于五的时候,看进位上是奇数还是偶数,偶数不进,奇数进一。舍位大于等于六,进位。这是由于浮点数(double或float)的不精确造成的,1.225 这个浮点数常量,在机器内部存储时,可能是 1.22500000000000001,所以被舍入为 1.23 了。 如果用 System.Decimal 数据类型,就没有这个问题了。把1060.235换成1060.235M试试 如何检索字符串中出现次数最高字符 在WinForm中调用为配置在IIS上的aspx网页???? treeview 控件如何改变大小? 不要高手,之要有经验就可以解决! 进程启动问题 如何将图片压缩发送,然后在接收端接收解压? 问个问题,在asp.net 中js怎么样才能得到session的值呀? 回车键 用webform方式做一个修改,编辑一个表的界面大概的思路是什么? 我是个C#的新手,请各位大虾们帮我看看我这样引用变量对吗? WMI 磁盘信息相关 有了lambda以后,是不是就可以不用Func<>模板了?
double d1 = Math.Round(1060.235, 2); //d1 = 1060.23
double d2 = Math.Round(1060.235, 2, MidpointRounding.ToEven); //d2 = 1060.23
如果舍入位为5则看前面一位数,前面一位数如果为偶数则舍入,为奇数则进。小数点后的算法目测还受小数点后第一位数的奇偶影响,MidpointRounding选哪个都无法影响你这个数的四舍五入结果,不过把小数点后的2改成3就行了…
具体算法都是参照 Banker's rounding
MidpointRounding.ToEven 这是IEEE的“四舍五入”。舍位小于等于四的时候,不进位。舍位等于五的时候,看进位上是奇数还是偶数,偶数不进,奇数进一。舍位大于等于六,进位。这是由于浮点数(double或float)的不精确造成的,1.225 这个浮点数常量,在机器内部存储时,可能是 1.22500000000000001,所以被舍入为 1.23 了。 如果用 System.Decimal 数据类型,就没有这个问题了。把1060.235换成1060.235M试试