使用下面的代码,我得到结果“4.31 43099”。
double f = atof("4.31");
long ff = f * 10000L;
std::cout << f << ' ' << ff << '\n';
如果我将“double f”更改为“float f”。我得到预期结果“4.31 43100”。我不确定将“double”更改为“float”是否是一个好的解决方案。有什么好的解决方案可以确保我得到“43100”吗?
最佳答案
您将无法消除浮点运算中的错误(尽管通过适当的分析您可以计算出错误)。对于随意使用,为了获得更直观的结果,您可以做的一件事是用正常的舍入替换内置的 float 到整数的转换(它会截断):
double f = atof("4.31");
long ff = std::round(f * 10000L);
std::cout << f << ' ' << ff << '\n';
这应该输出您所期望的:4.31 43100
此外,使用 10000L
也没有意义,因为无论您使用哪种整数类型,它仍然会转换为 f
的浮点类型以进行乘法运算。只需使用 std::round(f * 10000.0);
关于c++ - 如何避免 C++ 中的 float 舍入问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24330633/