#include <iostream>
int main()
{
int val = std::stof("4.99") * 100;
std::cout << val;
return 0;
}
我尝试了其他字符串,但它们似乎都在正确转换,但是我不确定幕后正在发生什么,导致该字符串输出498
而不是499
。在我的用例中,每个字符串最多具有2
个小数位。
答案 0 :(得分:5)
最近的 IEEE754 float
至4.99
为4.9899997711181640625
。 std::stof
将返回后者。
乘以100
就是498.999969482421875
,它被截断为498
。
恐怕这是浮点运算的陷阱之一;使用不连续函数(例如将float
转换为int
)时,需要格外小心;在您的特定情况下,对结果使用std::lround
即可。
答案 1 :(得分:2)
使用适当的函数可以正确舍入您的浮点数:
#include <cmath>
#include <iostream>
int main()
{
auto val = std::lround(std::stof("4.99") * 100);
std::cout << val;
return 0;
}