c函数向下舍入一半

发布于 2024-11-04 19:25:47 字数 150 浏览 4 评论 0原文

我正在搜索一个提供向下舍入的函数(C 语言)。例如:

1.5 after round half down = 1
1.49999999 after round half down = 1
1.50000001 after round half down = 2

I'm searching a function (in C language) which provide round half down. For example:

1.5 after round half down = 1
1.49999999 after round half down = 1
1.50000001 after round half down = 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

归属感 2024-11-11 19:25:47

以@jtniehof 的答案为基础。

ceil(x - 0.5)

这总是向下舍入一半。

Building on @jtniehof's answer.

ceil(x - 0.5)

This will always round halves down.

戏剧牡丹亭 2024-11-11 19:25:47

查看数学库中的 round 函数。

Have a look to round functions in math library.

拥抱没勇气 2024-11-11 19:25:47

惯用的方式:

int j;
float i = 0.49;
j = (int)(i + 0.5);

两个注意事项:

  1. 0.5 总是向上舍入
  2. 二进制的浮点表示并不总是您期望的十进制表示。 0.5可以准确表示; 0.3 不是。在这种情况下应该不是问题,但要始终牢记极端情况。

编辑:三个警告......对于负数来说绝对是错误的。如果您正在做任何复杂的事情,一定要查看数学库中的圆形函数,因为它们已经处理了极端情况。但是,如果在有限的输入上需要快速而肮脏的方法,则可以节省链接数学库的时间。

Idiomatic way:

int j;
float i = 0.49;
j = (int)(i + 0.5);

Two caveats:

  1. 0.5 will always round up
  2. The float representation in binary is not always what you expect in decimal. 0.5 is representable exactly; 0.3 is not. Shouldn't be a problem in this case but always work keeping in mind for corner-cases.

EDIT: Three caveats...definitely wrong for negative numbers. If you're doing anything at all complicated, definitely do look at the round functions in the math library, since they've handled the corner cases. But if quick-and-dirty is needed on limited input, this saves linking the math library.

吲‖鸣 2024-11-11 19:25:47
double RoundHalfDown(double f)
{
    double int_part;
    double frac_part = modf(f, &int_part);

    if (frac_part <= -0.5) return int_part - 1.0;
    if (frac_part <=  0.5) return int_part      ;
                           return int_part + 1.0;
}
double RoundHalfDown(double f)
{
    double int_part;
    double frac_part = modf(f, &int_part);

    if (frac_part <= -0.5) return int_part - 1.0;
    if (frac_part <=  0.5) return int_part      ;
                           return int_part + 1.0;
}
南冥有猫 2024-11-11 19:25:47

尝试roundf(float)round(double)

Try roundf(float) or round(double)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文