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