在c++中将浮点转换为字符串后丢失精度[重复]

问题描述 投票:0回答:1

我已将字符串值转换为浮点数并尝试为其设置精度。设置精度后,我得到的值被截断。

    #include<iostream>
    #include <bits/stdc++.h>
    int main()
    {
        std::string str ="1570734298.45";
        float val= stof(str);
        std::cout<<val<<std::endl;
        std::cout<<std::fixed<<std::setprecision(6)<<val;
        return 0;
    }

输出:

1.57073e+09
1570734336.000000
c++ string floating-point precision
1个回答
2
投票

这不依赖于字符串转换。这是

float
数据类型的限制。如果您使用
double
一切正常:

#include<iostream>
#include <string>
#include <iomanip>
int main()
{
    std::string str ="1570734298.45";
    float val= stof(str);
    std::cout<<val<<std::endl;
    std::cout<<std::fixed<<std::setprecision(6)<<val << std::endl;
    val = 1570734298.45f;
    std::cout<<std::fixed<<std::setprecision(6)<<val<< std::endl;
    
    double valD = stod(str);
    std::cout<<std::fixed<<std::setprecision(6)<<valD << std::endl;
    valD = 1570734298.45;
    std::cout<<std::fixed<<std::setprecision(6)<<valD << std::endl;
    return 0;
}

输出

1.57073e+09
1570734336.000000
1570734336.000000
1570734298.450000
1570734298.450000
© www.soinside.com 2019 - 2024. All rights reserved.