如何在C ++中计算10位小数精度的双变量

时间:2013-11-27 02:05:17

标签: c++ visual-studio-2008-sp1

我打算用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”。

谢谢

1 个答案:

答案 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位数。