日期:2014-05-17  浏览次数:20915 次

请教关于double转字符串,保留小数点后20位的问题
代码
double test;
test=1.01234567890123456789;
System::String::Format("test={0:N20};",test);
输出是
test=1.01234567890123000000;
而我想要的是
test=1.01234567890123456789;

丢了的那6位精度怎么处理呢?

double

------解决方案--------------------
没办法处理,因为计算机是二进制,有些数是没有办法精确表达的。就像人类用的十进制没有办法表达1/3一样。

你可以看看乘10的n次方变成整数保存行不行。用的时候再除。
------解决方案--------------------
2^64 才 18446744073709551616
刚刚够 20位,还有1-2字节(具体多少忘记了,自己翻翻书)作指数位

试试decimal
------解决方案--------------------
用decimal
------解决方案--------------------
用decimal精确吧
------解决方案--------------------
double类型:64位浮点数,取值范围在5.0×10-324 ~ 1.7×10308之间,精度为15~16 位数。
decimal类型:128位,它所表示的范围从大约1.0 ×10-28 到7.9 ×1028,具有28至29位有效数字。特别适用于金融、货币等领域。


------解决方案--------------------
顶楼上!..