C ++ stof函数转换为整数

时间:2019-03-21 09:34:27

标签: c++ string casting int

#include <iostream>

int main() 
{ 
    int val = std::stof("4.99") * 100; 

    std::cout << val; 

    return 0; 
}

我尝试了其他字符串,但它们似乎都在正确转换,但是我不确定幕后正在发生什么,导致该字符串输出498而不是499。在我的用例中,每个字符串最多具有2个小数位。

2 个答案:

答案 0 :(得分:5)

最近的 IEEE754 float4.994.9899997711181640625std::stof将返回后者。

乘以100就是498.999969482421875,它被截断为498

恐怕这是浮点运算的陷阱之一;使用不连续函数(例如将float转换为int)时,需要格外小心;在您的特定情况下,对结果使用std::lround即可。

进一步阅读:Is floating point math broken?

答案 1 :(得分:2)

使用适当的函数可以正确舍入您的浮点数:

#include <cmath>
#include <iostream>
int main() 
{ 
    auto val = std::lround(std::stof("4.99") * 100);

    std::cout << val; 

    return 0; 
}