鱼C论坛

 找回密码
 立即注册
查看: 427|回复: 3

字符转double出错

[复制链接]
发表于 2024-4-10 01:21:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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



lss 显示是:666.799999999995   是为啥?怎么才能显示666.80呢?
怎么使double  变量lss正确显示为666.80呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-10 01:33:36 | 显示全部楼层
可是要怎么把这个两们小数的结果输给一个double变量呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 21:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表