我打算用10小数点精度计算双精度型。当然,我希望结果precesion具有相同的10位小数精度。但是,它不起作用,在VS2008中只能有6个小数点。有什么理由或想法吗?
double dMag = 10;
double dPixelSize = 4.4;
double PixelWidth = 1024/2;
double PixelHeight = 768/2;
double umtomm = 1000;
double origin_PosX = 813.227696;
double origin_PosY = 676.195748;
double PosX = (origin_PosX - PixelWidth) * dPixelSize / dMag / umtomm;
double PosY = (origin_PosY - PixelHeight ) * dPixelSize / dMag / umtomm;
如果我检查PosX和PosY,则结果分别为“0.132540,0.128566”。我预计结果分别为“0.13254018624000002,0.12856612912”。
谢谢
答案 0 :(得分:3)
从我收集的内容中,你会混淆一些事情......
double
的精度不仅仅是小数点后6位。我强烈建议您阅读this wikipedia article,其中解释了基础double
数据类型如何存储您的数字并解释其精确度。
默认情况下,打印的精度限制为6位小数。为了解决这个问题,您需要了解如何使用format string。
在您的评论中,您提到了使用
tmp1.Format("%f,%f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1));
打印字符串。
尝试将此行更改为
tmp1.Format("%.10f,%.10f\r\n", PosX, PosY); file.Write(tmp1,lstrlen(tmp1));
你会看到它会在小数点后打印10位数。