为什么 setPrecision 不自动使用最小可用精度?

Why doesn't setPrecision automatically use the least available precision?

本文关键字:精度 setPrecision 为什么      更新时间:2023-10-16

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

xxx.xxxxxx

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

当我打印该双精度变量的值时,它输出的数字比点后应该多

预期输出应为:

xxx.xxxxxx

但我正在得到

xxx.xxxxxxxxxxxxxxxx

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

如果你要求输出的精度为 20 位,你会得到它。你似乎很惊讶你得到了一些你明确的东西要求。 除了 20 位精度之外的任何东西都会让我感到惊讶。

至于你读到的内容,通常,一个小数点后 6 位的数字没有双精度表示; strtod()将返回最接近的近似值。

我建议double在你阅读和理解http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。 double不是实数。

您正在读取该文件中的内容,但无法存储确切的数字。并非每个数字都可以精确地表示为double(或其他任何内容)。因此,您将获得一个近似值。