字符转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呢? 这是因为浮点数在计算机中表示存在精度问题。浮点数无法完全精确地表示某些十进制小数,因为计算机使用二进制来存储数据。
要想显示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 小助理,如未能正确解答您的问题,请继续追问。 可是要怎么把这个两们小数的结果输给一个double变量呢? 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]