可能重复:
Why do I see a double variable initialized to some value like 21.4 as 21.399999618530273?
这是我的代码
#include <sstream>
#include <iomanip>
#include <string>
#include <iostream>
int main(int ac, char **av)
{
if (ac > 1)
{
std::string input = av[1];
std::stringstream ss;
double output;
ss << input;
ss >> output;
std::cout << std::fixed << std::setprecision(2) << output << std::endl;
}
}
我正在尝试使用stringstreams将字符串转换为double。
它可以工作,但是当使用非常大的数字时它会非常奇怪:
./a.out 999999999999999999999999
999999999999999983222784.00
./a.out 42
42.00
我如何处理所有双倍值?
答案 0 :(得分:6)
您无法以任意精度处理“所有双精度值”。在您的情况下,您有大约15个十进制数字的精度。将std::numeric_limits<double>::digits10
写入控制台,你会看到。