c#程序中关于二进制到浮点数的转换

float resultInteger = 0.0f; 

float power = 1/2.0f;


for (i = highPointPosition+1; i <= highResultIndex; i++, power /= 2           

    resultInteger += result[i] * power;

power = 1.0f;


for (i = highPointPosition, power = 1.0f; i >= 0; i--, power *= 2)

    resultInteger += result[i] * power;


if (carry == 1)

 resultInteger += carry * power;

上面的代码将二进制转换为浮点数。我接到了一项作业,要求我将两个浮点数转换为二进制,然后将它们相加,然后将结果转换为浮点数。


在上面的代码中,当我执行3.5 + 5.39结果应该是8.89,而是8.889999。


对于其他人来说9.5 + 7.39,答案是正确的,即16.89。


任何人都可以帮助解释为什么我遇到这样的问题吗?


胡子哥哥
浏览 795回答 2
2回答

SMILET

发生这种情况的原因是1/10无法在二进制系统中准确表达。您可以尝试以下操作:float a = 3.5f;float b = 5.39f;Console.WriteLine(Math.Round(a + b, 2));Console.ReadLine();使用Math.Round(value, digits),就可以得到想要的结果。

慕桂英546537

二进制不能1/10用十进制准确表达,就像基数 10 不能1/3准确表达,而基数 12 可以(三分之一0.4在基数 12 中)。通常,如果您想获得更好的数学准确性,您可以使用decimal来代替进行数学运算,如下所示:decimal&nbsp;x&nbsp;=&nbsp;2.5M; decimal&nbsp;y&nbsp;=&nbsp;1.19M; Console.WriteLine(x&nbsp;+&nbsp;y);decimal有效,因为它以十进制计算,而不是二进制。但是,如果您的教授要求您将其转换为二进制以进行数学运算,那么初始类型是什么并不重要。用二进制永远不可能得到正确的结果。
打开App,查看更多内容
随时随地看视频慕课网APP