为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
胡子哥哥 2021-06-23 17:15:20
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 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

发生这种情况的原因是1/10无法在二进制系统中准确表达。


您可以尝试以下操作:


float a = 3.5f;

float b = 5.39f;


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

Console.ReadLine();

使用Math.Round(value, digits),就可以得到想要的结果。


查看完整回答
反对 回复 2021-06-26
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

二进制不能1/10用十进制准确表达,就像基数 10 不能1/3准确表达,而基数 12 可以(三分之一0.4在基数 12 中)。

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

decimal x = 2.5M;
decimal y = 1.19M;
Console.WriteLine(x + y);

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


查看完整回答
反对 回复 2021-06-26
  • 2 回答
  • 0 关注
  • 794 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信