gle*_*xey 0 c# python floating-point rounding
我正在用 python 开发一个应用程序,其中一些部分是用 c# 编写的(为了加速),我很困惑为什么在使用“round”函数和字符串浮点格式化函数时,c# 浮点舍入的行为与 python 的行为“相反”,这是一个例子:
Python (2.7)
>>> round(6.25, 1)
6.3
>>> "%.1f"%6.25
6.2
Run Code Online (Sandbox Code Playgroud)
C#
>>> Math.Round(6.25,1)
6.2
>>> (6.25).ToString("F1")
6.3
Run Code Online (Sandbox Code Playgroud)
有谁理解为什么 Python 与 C# 之间的行为似乎“相反”?有没有办法将“双精度”浮点值舍入为 N 位十进制数字,以在 Python 和 C# 之间产生保证相同的字符串输出?
这是由于您调用的两个方法的中点分辨率所致。
返回四舍五入到
ndigits小数点后的浮点数值。如果ndigits省略,则默认为零。结果是一个浮点数。值四舍五入到最接近的 10 次方的倍数ndigits;如果两个倍数同样接近,则进行舍入0(例如,round(0.5)is1.0和round(-0.5)is-1.0)。
将双精度浮点值四舍五入到指定的小数位数,并将中点值四舍五入到最接近的偶数。
换句话说:
6.25变成6.3因为6.3距离0比更远6.2)6.25变为,6.2因为6.2是最接近的偶数。Math.Round您可以通过使用采用MidpointRounding枚举值(例如Round(double, int, MidpointRounding) )的
重载之一来修复此问题,例如:
Math.Round(6.25, 1, MidpointRounding.AwayFromZero);
Run Code Online (Sandbox Code Playgroud)
这将执行与 Python 舍入相同的操作。
| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |