关于c#program

时间:2018-05-23 04:36:08

标签: 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

任何人都可以帮助解释我遇到这种问题的原因吗?

2 个答案:

答案 0 :(得分:2)

二进制不能准确地表达十进制小数1/10,就像基数10不能准确表达1/3一样,而基数12可以(基数12中的1/3是0.4)。

通常情况下,如果你想获得更好的数学准确性,你可以使用decimal代替数学运算,如下所示:

decimal x = 2.5M;
decimal y = 1.19M;

Console.WriteLine(x + y);

decimal有效,因为它以十进制计算,而非二进制计算。但是,如果你的教授要求你转换成二进制来进行数学运算,那么初始类型是什么并不重要。永远不可能用二进制获得正确的结果。

答案 1 :(得分:-1)

这是因为1/10无法在二进制系统中准确表达。

您可以尝试以下操作:

float a = 3.5f;
float b = 5.39f;

Console.WriteLine(Math.Round(a + b, 2));
Console.ReadLine();

使用Math.Round(value, digits),您可以获得所需的结果。