[英]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.