簡體   English   中英

C#如何精確地將雙精度轉換為十進制?

[英]How *exactly* does C# convert double to decimal?

以下C#代碼顯示0.1-為什么?

var s = "0.1";
var dbl = Double.Parse(s);
var dcml = Convert.ToDecimal(dbl);
Console.WriteLine(dcml.ToString());

0.01不是不能用二進制表示的,因此應該打印0.100000001490116嗎?

dbl的值正好是0.1000000000000000055511151231257827021181583404541015625。

那是0.1到17個有效數字。

Convert.ToDecimal(Double)文檔指出:

此方法返回的十進制值最多包含15個有效數字。 如果value參數包含15個以上的有效數字,則使用舍入到最接近的值將其舍入。

Single (aka float )進行轉換已被記錄為可以更早地截斷:

此方法返回的Decimal值最多包含七個有效數字。 如果value參數包含七個以上的有效數字,則使用四舍五入到最接近的值四舍五入。

如果使用初始值從0.1f轉換的值調用Convert.ToDecimal(Double) ,它將顯示0.100000001490116:

double dbl = 0.1f;        
decimal dcml = (decimal) dbl;
Console.WriteLine(dcml);

暫無
暫無

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

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