如何在C中正确舍入双打? [重复]

问题描述 投票:-1回答:1

由于某些原因,ceil(x)将舍入的数字四舍五入为x + 1。

例如:

double og_grade = 50;
double fact_grade = ceil(og_grade*1.1);

[og_grade*1.1应该为55.0000,但是ceil(og_grade*1.1)返回56.0000

请注意,og_grade始终是整数。

c variables rounding
1个回答
3
投票

我尝试了ceil(x)函数,但是由于某种原因,当x in已经 一轮,将其向上舍入为x + 1

[这不意味着ceil的实现有缺陷。不是不可能,但极端不太可能。

[观察到这种效果的x实际上可能不是整数,并且格式化或调试器中省略了小数部分。

假设为IEEE754,则double到1.1的值稍大于此值;这最有可能说明您的结果。在您的情况下,考虑到op_grade实际上是整数,最好的选择是将int用作op_grade,然后乘以11;随后进行的舍入检查既琐碎又精确。

© www.soinside.com 2019 - 2024. All rights reserved.