问题描述
我有一个双重138630.78380386264
,我想把它转换成十进制,但是当我这样做的时候,我可以通过转换或者使用 Convert.ToDecimal()
并且我松动精度。 发生了什么事?十进制和双数都可以保存此号码:
double doub = double.Parse(138630.78380386264);
decimal dec = decimal.Parse(138630.78380386264);
string decs = dec.ToString(F17);
string doubse = DoubleConverter.ToExactString(doub);
string doubs = doub.ToString(F17);
decimal decC =(decimal)doub;
string doudeccs = decC.ToString(F17);
decimal decConv = Convert.ToDecimal(doub);
string doudecs = decConv.ToString(F17);
另外:如何获取 ToString()
双击打印输出与调试器显示相同的结果?例如 138630.78380386264
?
138630.78380386264
不能精确地代表双精度。最接近的双精度数字(如所示)为 138630.783803862635977566242218017578125
,它符合你的发现。
你问为什么转换为十进制不包含更多的精度。 Convert.ToDecimal()$ c $ 有答案:
正如上面显示的那样,双重值,四舍五入到最接近15个有效数字的 138630.783803863
。
I have a double "138630.78380386264"
and I want to convert it to a decimal, however when I do so I do it either by casting or by using Convert.ToDecimal()
and I loose precision.
What's going on? Both decimal and double can hold this number:
double doub = double.Parse("138630.78380386264");
decimal dec = decimal.Parse("138630.78380386264");
string decs = dec.ToString("F17");
string doubse =DoubleConverter.ToExactString(doub);
string doubs = doub.ToString("F17");
decimal decC = (decimal) doub;
string doudeccs = decC.ToString("F17");
decimal decConv = Convert.ToDecimal(doub);
string doudecs = decConv.ToString("F17");
Also: how can I get the ToString()
on double to print out the same result as the debugger shows? e.g. 138630.78380386264
?
138630.78380386264
is not exactly representable to double precision. The closest double precision number (as found here) is 138630.783803862635977566242218017578125
, which agrees with your findings.
You ask why the conversion to decimal does not contain more precision. The documentation for Convert.ToDecimal()
has the answer:
The double value, rounded to nearest at 15 significant figures is 138630.783803863
, exactly as you show above.
这篇关于C#双倍到十进制精度损失的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!