C++ double to string 默认保留小数

举报
福州司马懿 发表于 2024/04/26 18:24:08 2024/04/26
【摘要】 在C++中,将double转换为string通常使用std::to_string函数。默认情况下,std::to_string会保留double变量的精度。#include <iostream>#include <string> int main() { double value = 123.456789; std::string str = std::to_string(val...

在C++中,将double转换为string通常使用std::to_string函数。默认情况下,std::to_string会保留double变量的精度。

#include <iostream>
#include <string>
 
int main() {
    double value = 123.456789;
    std::string str = std::to_string(value);
    std::cout << str << std::endl; // 输出: 123.456789
    return 0;
}

这个代码乍一看很正常。但如果我们修改一下代码,就会发现不对劲了

#include <iostream>
#include <string>
 
int main() {
    double value = 0.0000000001;
    std::string str = std::to_string(value);
    std::cout << str << std::endl; // 输出: 0.0000000
    return 0;
}

可以看到当double的小数位数超出6位的时候,就会先经过四舍五入,然后才被转化为字符串。虽然还会保留6位小数,但值明显不是我们想要的(因为缺失了精度)

如果需要指定小数点后的位数,可以使用std::fixed和std::setprecision

#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
 
std::string doubleToString(double value, int precision) {
    std::ostringstream oss;
    oss << std::fixed << std::setprecision(precision) << value;
    return oss.str();
}
 
int main() {
    double value = 123.456789;
    std::string str = doubleToString(value, 4);
    std::cout << str << std::endl; // 输出: 123.4568
    value = 0.0000000001;
    std::string str = doubleToString(value, 10);
    std::cout << str << std::endl; // 输出: 0.0000000001
    return 0;
}

在这个例子中,doubleToString函数将double转换为字符串,并保留到指定的小数位数(例如4位)。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。