Nak*_*aan 2 c# floating-point rounding
所以,我有这个浮点数:
(float)-123456.668915
这是一个随机选择的数字,因为我正在为我写的一大块BCD代码做一些单元测试.每当我将上面的数字与一个字符串("-123456.668915"要清楚)进行比较时,我就会遇到C#如何舍入数字的问题.它将其舍入为-123456.7.这已在NUnit中检查并具有直接控制台输出.
为什么这样四舍五入?根据MSDN,浮点范围约为-3.4*10 ^ 38到+3.4*10 ^ 38,精度为7位.以上数字,除非我完全失去了一些东西,是好该范围内,并且只有小数点后6位数字.
谢谢您的帮助!
Jon*_*eet 14
根据MSDN,浮点范围约为-3.4*10 ^ 38到+3.4*10 ^ 38,精度为7位.除非我完全遗漏了某些内容,否则上述数字在该范围内,并且在小数点后仅有6位数.
"小数点后6位"与"6位精度"不同.精度的位数是可以可靠保持的有效位数.您的号码有12位有效数字,因此无法完全表示它并不令人惊讶float.
请注意,该数字(假设为)舍入为-123456.7,确实有7位有效数字.事实上,这不是你的价值float.我强烈怀疑确切的值是-123456.671875,因为它最接近float-123456.668915.但是,当您将精确值转换为字符串表示形式时,结果只有7位数,部分原因是除此之外,数字无论如何都不是真正有意义的.
您可能应该阅读我在.NET中关于二进制浮点的文章以获取更多详细信息.