如何确定一个数字,例如1.577,是否可以用float或double格式精确表示?
这意味着它是真正的1.577而不是1.566999999999994324等.
编辑:我正在寻找一个工具,我可以在其中键入一个数字,它将显示它的双/浮点表示.所以这不仅仅是c#相关的问题.
Ric*_*gan 18
您可以使用在线十进制到浮点转换器.例如,键入1.577,您会得到两个不准确的指示:
1)选中"Inexact"框
2)双精度浮点数转换为1.5769999999999999573674358543939888477325439453125.
对比1.25这样的数字,打印为1.25,并且不检查"不精确"框.
(该转换器还可以检查单精度数字.)
您已经有了关于如何明确检查精确表示的答案。此外,无需正式测试即可消除许多数字并立即检查短小数部分既可行又有用。
假设您的数字的十进制表示在 N 位小数后终止。例如,对于 1.577,N 为 3。取小数点后的部分,将其视为整数,577。如果该数字可以准确表示为二进制分数,则该部分必须是 5^N 的整数倍。577 不是 125 的整数倍,因此 1.577 不能完全表示。
如果你有一些合理的数量级,其十进制表示中只有几个有效数字,那么如果它通过了这个测试,它就完全可以表示了。例如,我知道在没有计算机化测试的情况下,1.625 是完全可以表示的。