为什么setPrecision不会自动使用最少的可用精度?

时间:2012-08-15 07:44:19

标签: c++

我有一个文本文件,其中包含每行中的一些值,如:

xxx.xxxxxx

我正在阅读每一行并使用strod()将它们转换为str并将它们存储在一个临时的双变量中。

当我打印该双变量的值时,它输出的数字比点之后的数字要多。

预期输出应为:

xxx.xxxxxx

但我正在

xxx.xxxxxxxxxxxxxxxx

使用setprecision(20)。知道为什么会这样吗?另外,我如何阅读文件中的内容?

2 个答案:

答案 0 :(得分:4)

如果你要求输出的20位精度,你就可以得到它。 你似乎对你明确得到的东西感到惊讶 请求。除了20位数之外的任何东西都会让我感到惊讶。

至于您所阅读的内容,通常情况下,小数点后6位的数字没有 双重精确表示; strtod()将返回最近的 近似。

我建议您在阅读之前不要尝试使用double 了解 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.htmldouble 是一个实数。

答案 1 :(得分:1)

您正在阅读该文件中的内容,但无法存储完全号码。并非每个数字都可以精确地表示为double(或其他任何事情)。因此,你会得到一个近似值。