c stof函数铸造为整数

C++ stof function cast to integer

本文关键字:整数 stof 函数      更新时间:2023-10-16
#include <iostream>
int main() 
{ 
    int val = std::stof("4.99") * 100; 
    std::cout << val; 
    return 0; 
}

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

最近的 ieee754 float to 4.994.9899997711181640625std::stof将返回后者。

乘以100的是498.999969482421875,它已截断为498

这是恐怕浮点算术的陷阱之一。当使用不连续功能(例如float转换为int)时,您需要小心。在您的特定情况下使用std::lround将有效。

进一步读取:浮点数学是否损坏?

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