我有一个double小数点后的17位数,即:
double myDouble = 0.12345678901234567;
Run Code Online (Sandbox Code Playgroud)
如果我把它转换成decimal这样的:
decimal myDecimal = Convert.ToDecimal(myDouble);
Run Code Online (Sandbox Code Playgroud)
然后根据文档将值myDecimal四舍五入为Convert.ToDecimal15位数(即0.0123456789012345).我的问题是,为什么要进行这种舍入?
我明白,如果我的原始数字可以准确地表示在基数10中并且我试图将其存储为a double,那么我们只能对前15位数有信心.最后两位数将受到舍入误差的影响.但是,这是一个基础10偏见的观点.我的数字可以用a更准确地表示double,我希望将其转换decimal为尽可能保持尽可能准确的数字.
不应Convert.ToDecimal旨在尽量减少之间的区别myDouble和(double)Convert.ToDecimal(myDouble)?
Double值最多包含15个十进制数字的精度,但内部最多保留17位数
因此,由于double值本身最多有15个小数位,将其转换为Decimal将导致Decimal值具有15位有效数字.