我有一个文本文件,其中包含每行中的一些值,如:
xxx.xxxxxx
我正在阅读每一行并使用strod()将它们转换为str并将它们存储在一个临时的双变量中。
当我打印该双变量的值时,它输出的数字比点之后的数字要多。
预期输出应为:
xxx.xxxxxx
但我正在
xxx.xxxxxxxxxxxxxxxx
使用setprecision(20)。知道为什么会这样吗?另外,我如何阅读文件中的内容?
答案 0 :(得分:4)
如果你要求输出的20位精度,你就可以得到它。 你似乎对你明确得到的东西感到惊讶 请求。除了20位数之外的任何东西都会让我感到惊讶。
至于您所阅读的内容,通常情况下,小数点后6位的数字没有
双重精确表示; strtod()
将返回最近的
近似。
我建议您在阅读之前不要尝试使用double
了解
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。
double
不是一个实数。
答案 1 :(得分:1)
您正在阅读该文件中的内容,但无法存储完全号码。并非每个数字都可以精确地表示为double
(或其他任何事情)。因此,你会得到一个近似值。