lrlyg 发表于 2024-4-10 01:21:28

字符转double出错

本帖最后由 lrlyg 于 2024-4-10 01:37 编辑

string ls = "666.8";
double   lss = std::stod(ls);



lss 显示是:666.799999999995   是为啥?怎么才能显示666.80呢?
怎么使double变量lss正确显示为666.80呢?

FishC 发表于 2024-4-10 01:21:40

这是因为浮点数在计算机中表示存在精度问题。浮点数无法完全精确地表示某些十进制小数,因为计算机使用二进制来存储数据。

要想显示666.80而不是666.799999999995,你可以使用输出格式进行控制,让它只显示小数点后两位。可以使用iomanip库中的setprecision函数来设置输出的小数位数:

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>

int main() {
    std::string ls = "666.8";
    double lss = std::stod(ls);

    std::cout << std::fixed << std::setprecision(2) << lss << std::endl;

    return 0;
}

输出结果就会是666.80了。在上面的代码中,我们使用了`std::fixed`和`std::setprecision(2)`来固定小数点后两位的精度。

希望这能解决你的问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

lrlyg 发表于 2024-4-10 01:33:36

可是要怎么把这个两们小数的结果输给一个double变量呢?

FishC 发表于 2024-4-10 01:33:46

lrlyg 发表于 2024-04-10 01:33
可是要怎么把这个两们小数的结果输给一个double变量呢 ...

要想将一个带有两位小数的浮点数结果赋值给一个double变量,并且保持小数部分的精度,你可以使用std::setprecision函数设置输出的小数位数,然后将其转换成字符串再转换回double类型。

下面是一个示例代码:

#include <iostream>
#include <iomanip>
#include <string>

int main() {
    double result = 666.799999999995;
   
    // 将结果转换为字符串
    std::string str_result = std::to_string(result);
   
    // 将字符串转换为double类型
    double final_result = std::stod(str_result);
   
    // 输出结果并设置小数位数为2
    std::cout << std::fixed << std::setprecision(2) << final_result << std::endl;
   
    return 0;
}

这样,输出结果将会是666.80。注意,我们在输出之前使用了std::fixed来固定小数位数,以便确保小数部分显示为两位。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 字符转double出错