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
小数位。
在最近的 IEEE754 float
到4.99
是4.9899997711181640625
。std::stof
将返回后者。
这乘以100
就是498.999969482421875
被截断为498
。
恐怕这是浮点运算的陷阱之一;当使用不连续的函数(如float
to 的转换)时,您需要格外小心int
。std::lround
在结果上使用将在您的特定情况下起作用。
进一步阅读:浮点数学运算是否被破坏?