修复 c++ 中 static_cast() 的精度
# include <iostream>
using namespace std;
int main()
{
double a;
cin >> a;
int b = (int) a*100;
cout << b << endl;
}
如果你输入 2.53,它会给出 b=252
我知道这是一个精度问题,但是如何在不使用比较的情况下修复它?
# include <iostream>
using namespace std;
int main()
{
double a;
cin >> a;
int b = (int) a*100;
cout << b << endl;
}
If you input 2.53, it gives b=252
I know it's a precision thing, but how do you fix it without using comparison?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果保证 a 为正数,则使用:
如果不使用:
Float 到 int 强制转换截断(向零舍入)。
如果您想继续截断,但只想避免精度问题,请使用小 epsilon (1e-4) 而不是上面代码中的 0.5 int。
If a is guaranteed to be positive, use:
If not use:
Float to int cast truncates (rounds towards zero).
If you want to keep truncating, but only want to avoid precision issues, use a small epsilon (1e-4) instead of 0.5 int the code above.
您想要舍入而不是截断。地板功能对此很方便:
You want to round instead of truncating. The floor function is handy for this: