所以,我有这个浮点数:(float)-123456.668915
这是一个随机选择的数字,因为我正在对正在编写的BCD代码块进行一些单元测试。每当我将上面的数字与字符串(要清楚的"-123456.668915"
)进行比较时,我就会遇到C#如何舍入数字的问题。将其舍入为-123456.7。这已在NUnit中进行了检查,并具有直接的控制台输出。
为什么这样舍入?根据MSDN,浮点数的范围约为-3.4 * 10 ^ 38到+3.4 * 10 ^ 38,精度为7位。除非我完全缺少某些东西,否则上面的数字恰好在该范围内,并且小数点后只有6位数字。
谢谢您的帮助!
最佳答案
根据MSDN,浮点数的范围约为-3.4 * 10 ^ 38到+3.4 * 10 ^ 38,精度为7位。除非我完全缺少某些东西,否则上面的数字恰好在该范围内,并且小数点后只有6位数字。
“小数点后6位数字”与“精度6位数字”不同。精度位数是可以可靠保留的有效位数。您的数字有12位有效数字,因此不能完全用float
表示就不足为奇了。
请注意,(假设)四舍五入到的数字-123456.7确实有7个有效数字。实际上,这也不是您的float
的值。我强烈怀疑确切的值是-123456.671875,因为这是最接近-123456.668915的float
。但是,当您将精确值转换为字符串表示形式时,结果只有7位数字,部分原因是超出该点这些数字实际上并没有任何意义。
您可能应该阅读my article about binary floating point in .NET以获得更多详细信息。
关于c# - 为什么C#这样四舍五入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21447394/