开发者社区> 问答> 正文

在C中始终四舍五入的最佳方法?

我一直在尝试寻找始终舍入变量的最佳方法。

我尝试了ceil(x)函数,但是由于某种原因,当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始终是整数)。

展开
收起
kun坤 2019-11-29 11:17:17 442 0
1 条回答
写回答
取消 提交回答
  • 我尝试了ceil(x)函数,但是由于某种原因,当x已经取整时,它会将其四舍五入为x + 1

    否,这并不意味着的实施ceil有缺陷。不是不可能,但极不可能。

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

    假设IEEE754,最接近 double 1.1的值略大于该值。这最有可能说明您的结果。

    在您的情况下,鉴于op_grade实际上是整数,您最好的选择是使用intfor op_grade,然后乘以11;随后的舍入检查既琐碎又精确。

    简而言之,我的任务是获得一个成绩并返还10%的分数,并且总是四舍五入。如果它是60.5,则返回61。如果它是55,则返回55。如果结果大于100,则应返回100。我尝试返回原始等级的ceil()乘以1.1。所有非常非常基本的东西,但是我一直在为这个问题发疯。最佳的执行方式是什么?

    #https://stackoverflow.com/questions/59090506/best-way-to-always-round-up-doubles-in-c

    2019-11-29 11:17:48
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载