【问题标题】:How to round down a double to the nearest smaller int in C?如何将双精度舍入到 C 中最接近的较小 int?
【发布时间】:2010-12-10 12:48:18
【问题描述】:

我有双份:

double d = 25.342;

如何将其转换为25 值?

如果是-12.46,我想得到-13

【问题讨论】:

  • 郑重声明,您要求的是四舍五入,而不是强制转换。
  • @Jon 不,这不是rounding。四舍五入是将数字转换为“最近的”整数。
  • 绝对是四舍五入。舍入到最近是舍入的一种类型。舍入是另一个。
  • aib:浮点表示法非常适合表示整数(只要有足够的位数)。如果 floor() 有问题,我会感到非常惊讶。
  • ...如果您遇到floor( ) 返回非整数值的系统,这是一个错误,您应该向在该系统上提供数学库的人投诉。跨度>

标签: c double int


【解决方案1】:
#include <math.h>
#include <stdio.h>

int main(){

    double d = 25.342;
    double e = -12.99;

    printf("%d\n",(int)round(d)); // 25
    printf("%d\n",(int)round(e)); // -13

    return 0;
}

您可能还想看看 stdint.h

【讨论】:

  • 对于25.9 等许多值都失败,因为它不会“将双精度值向下舍入到最接近的较小 int”。
【解决方案2】:

x 是你的 25.342

int i = x >= 0 ? (int)(x+0.5) : (int)(x-0.5)

【讨论】:

  • @Mike 我认为他不想四舍五入。看负数例子:)
  • 我做了,他的帖子说“(如果是-12.46,我想得到-13)”所以我假设有点四舍五入。
  • 这是四舍五入到更低的值,或者本质上是 floor()。
  • 不会四舍五入 -12.46 给你和整数值 -12 而不是 -13?
  • 将 -12.46 舍入到最接近的整数将产生 -12,接近于零的舍入也是如此。四舍五入会给你-13,这就是提问者想要的。
【解决方案3】:
int i = (int)floor(25.342);

请注意,这会将 12.99999 转换为 12。

参考:

http://www.codecogs.com/reference/c/math.h/floor.php

【讨论】:

  • 支持参考链接,但您不需要转换为 int, floor 已经作为 int 返回?
  • floor( ) 返回一个双精度值(C 标准中的第 7.12.9.2 节)。
【解决方案4】:
int i = (int)floor(25.342);

【讨论】:

  • 我希望结果是 int 类型
  • 当 floor 的参数 > INT_MAX 或
  • 在这种情况下,您实际上无法获得值的整数版本,所以这并不重要。
  • @KevinKostlan (int)floor(-25.342) 返回 -26,而 (int) -25.342 返回 -25。 floor 如果您知道该值为正,则不需要。
  • dbl 为负整数时,@Aaron Campbell ((int) dbl) -1 不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
相关资源
最近更新 更多