关于C# Math.Round()函数的疑问

2020-08-13 21:57发布

最近在使用 Math.Round()的时候发现一个问题,感觉很奇怪,想不通,请各位大侠指点。
double cc = 0.068627450980392163;
double aa = Math.Round(cc, 4); // aa=0.0686
double bb = Math.Round(cc, 4) * 100; // bb=6.8599999999999994

如上所示三行代码,我本意是想四舍五入,精确到小数点后4位后乘以100得出一个数值,
期望数值是6.86
但实际上四舍五入后乘以100的数值结果并不是期望值,好像并没有精确后四位。
想要得到期望值,貌似只能把cc值先乘以100后再调用Math.Round()。不知道这是什么原因。有知道的吗

标签:
3条回答
The star\"
2楼-- · 2020-08-13 21:57

不確定如何不服你的期望
測試結果是6.86沒錯
附上測試代碼給你參考
https://dotnetfiddle.net/fCzoVN

查看更多
Viruses.
3楼-- · 2020-08-13 22:12

建议用decimal,如果需要精确计算的话。还有,实际上这个函数的结果不是通常意义上的四舍五入,而是四舍六入五成双算法吧

查看更多
淡お忘
4楼-- · 2020-08-13 22:23

你自己用该数二进制和十进制按照浮点数规范互转一下就不觉得奇怪了。

很多时候都是近似值不是准确值,因为无法相等换算过去。

查看更多
登录 后发表回答