第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c#程序中關(guān)于二進制到浮點數(shù)的轉(zhuǎn)換

c#程序中關(guān)于二進制到浮點數(shù)的轉(zhuǎn)換

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;上面的代碼將二進制轉(zhuǎn)換為浮點數(shù)。我接到了一項作業(yè),要求我將兩個浮點數(shù)轉(zhuǎn)換為二進制,然后將它們相加,然后將結(jié)果轉(zhuǎn)換為浮點數(shù)。在上面的代碼中,當我執(zhí)行3.5 + 5.39結(jié)果應(yīng)該是8.89,而是8.889999。對于其他人來說9.5 + 7.39,答案是正確的,即16.89。任何人都可以幫助解釋為什么我遇到這樣的問題嗎?
查看完整描述

2 回答

?
SMILET

TA貢獻1796條經(jīng)驗 獲得超4個贊

發(fā)生這種情況的原因是1/10無法在二進制系統(tǒng)中準確表達。


您可以嘗試以下操作:


float a = 3.5f;

float b = 5.39f;


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

Console.ReadLine();

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


查看完整回答
反對 回復(fù) 2021-06-26
?
慕桂英546537

TA貢獻1848條經(jīng)驗 獲得超10個贊

二進制不能1/10用十進制準確表達,就像基數(shù) 10 不能1/3準確表達,而基數(shù) 12 可以(三分之一0.4在基數(shù) 12 中)。

通常,如果您想獲得更好的數(shù)學(xué)準確性,您可以使用decimal來代替進行數(shù)學(xué)運算,如下所示:

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

decimal有效,因為它以十進制計算,而不是二進制。但是,如果您的教授要求您將其轉(zhuǎn)換為二進制以進行數(shù)學(xué)運算,那么初始類型是什么并不重要。用二進制永遠不可能得到正確的結(jié)果。


查看完整回答
反對 回復(fù) 2021-06-26
  • 2 回答
  • 0 關(guān)注
  • 838 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號