c# - 为什么 Convert.ToDecimal(Double) 四舍五入到 15 位有效数字?

标签 c# double decimal

我有一个小数点后有 17 位的 double,即:

double myDouble = 0.12345678901234567;

如果我像这样将其转换为 decimal:

decimal myDecimal = Convert.ToDecimal(myDouble);

然后根据 Convert.ToDecimal 文档,将 myDecimal 的值四舍五入为 15 位数字(即 0.0123456789012345)。我的问题是,为什么要进行舍入?

我明白,如果我的原始数字可以以 10 为基数准确表示,并且我试图将其存储为 double,那么我们只能对前 15 位数字有信心。最后两位数字可能会出现舍入误差。但是,这是一个以 10 为基数的偏见观点。我的数字可能更准确地表示为 double,我希望将其转换为 decimal,同时尽可能保持准确性。

Convert.ToDecimal 不应该旨在最小化 myDouble(double)Convert.ToDecimal(myDouble) 之间的差异吗?

最佳答案

来自documentation of Double :

A Double value has up to 15 decimal digits of precision, although a maximum of 17 digits is maintained internally

因此,由于 double 值本身最多有 15 位小数,因此将其转换为 Decimal 将产生具有 15 位有效数字的 Decimal 值。

关于c# - 为什么 Convert.ToDecimal(Double) 四舍五入到 15 位有效数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20495306/

相关文章:

c# - 这两个正则表达式术语是否会使用 C# isMatch() 方法找到相同的匹配项?

javascript - 无法在 ASP.NET 中集成 reCAPTCHA v2(服务器端)

java - 为什么整数除以零 1/0 会给出错误但浮点 1/0.0 返回 "Inf"?

python - 如何将十进制数转换为分数?

c - C Char 数组中的十进制到二进制

C# JavaScriptSerializer - 如何序列化为基本类型?

c# - Nest Elasticsearch,结合Must和Should的bool查询

python - 如何在python中打印十进制值

c++ - 用C++计算Ramanujan常数

list - 计划列表中的重复条目