C ++ stof函数转换为整数

Aar*_*sus 2 c++ string int casting

#include <iostream>

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

    std::cout << val; 

    return 0; 
}
Run Code Online (Sandbox Code Playgroud)

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

Bat*_*eba 5

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

这乘以100就是498.999969482421875被截断为498

恐怕这是浮点运算的陷阱之一;当使用不连续的函数(如floatto 的转换)时,您需要格外小心intstd::lround在结果上使用将在您的特定情况下起作用。

进一步阅读:浮点数学运算是否被破坏?