簡體   English   中英

小數負數和正數之和

[英]Decimal negative and positive numbers sum

在Java和C#中:

int a = (int)(-1.5 + 2.5);
int b = (int)(-1.55 + 2.55);
int c = (int)(1.45 + 2.55);
// a = 1; b = 0; c = 4;

誰能解釋為什么小數點后在帶有2個或更多數字的負數上加上正數會導致十進制數中斷? “ b = 0.99999999999999978”。

所以問題是-為什么“ -1.5 + 2.5 = 1”,而“ -1.55 + 2.55 = 0”?

這是因為double類型是一個近似值。

通常, double表示IEEE 754標准類型的decimal64


Math.Round允許您指定MidpointRounding

ToEven-當一個數字位於兩個其他數字之間時,將四舍五入到最接近的偶數。

AwayFromZero-一個數字在兩個之間的一半時,將四舍五入為最接近零的數字。

例:

var val = (int)Math.Round((-1.55 + 2.55), 1, MidpointRounding.ToEven);
Console.WriteLine(val);

輸出1


初學者的常見錯誤是編寫如下代碼:

for (double i = 0.0; i == 6.0; i+=0.1)
{
    Console.WriteLine(i);
}

提示:這不會以〜60步結束。

使用double時,IEEE-754格式的某些小數不能正確表示。 而是使用BigDecimal。 例如:

BigDecimal result = new BigDecimal("-1.55").add(new BigDecimal("2.55"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM