C中除法的奇怪结果

一些重复:
1.265 * 10000 = 126499.99999999999 ?????
浮点是如何存储的? 什么时候重要?
Java程序中奇怪的浮点行为
为什么我看到一个双变量初始化为某个值,如21.4为21.399999618530273?
Flash添加错误

我将23除以40(23/40)。 在C中,该操作结果为0.5749999999999996。 但实际上它必须是0.575!

我怎样才能解决这个问题?

问题是因为.575值在浮点编码中没有精确的表示。 修复取决于您必须处理的值以及不准确性的影响。

如果它只是一个显示问题,使用舍入到3位小数,你将获得0.575。

如果是因为计算不准确,请尝试将值保持为精确的分数。 您将必须存储和处理两个浮点值,但它将是准确的。 将有效除法推迟到需要结果的最后时刻。

检查两个值之间的差异是否与您的问题相关。 例如,将sqrt epsilon减去该值,并检查更改对最终计算结果的影响程度,并将其与所需或所需的精度进行比较。

不幸的是,我们必须忍受浮动中实际值表示的限制。 使用128位精度浮点数会使误差小得多但不为空。

看看这个 – 它应该告诉你关于为什么计算机吮吸数学需要知道的一切

这是一个存储浮点数的工件。

要么你可以围绕答案sprintf(“%。3f”,结果)或使用一些十进制处理包。

我建议你在网上搜索“浮点精确度”,或者查看关于你的绝对数十个其他问题。

浮点运算是正常的。 例如,您可以使用%.3g更改浮动 s和 s的打印方式

你无法解决这个问题。 并非所有数字都可以表示为浮点数,请参阅“如何存储浮点数,何时重要” 。