【问题标题】:How do I round a positive float up the next integer?如何将正浮点数舍入下一个整数?
【发布时间】:2014-09-22 11:10:35
【问题描述】:

我需要将一个正浮点数向上舍入到最接近的整数。

examples;

1.0 rounds up to 1    
2.1 rounds up to 3
3.5 rounds up to 4
4.9 rounds up to 5 

即总是四舍五入。

【问题讨论】:

  • FWIW、向上舍入和最近是不兼容的。你的意思只是四舍五入。
  • -4.4 应该舍入到什么? -5 还是 -4?
  • @AustinFrench 为什么不呢?对我来说似乎是四舍五入。四舍五入不是唯一的舍入方法。您可以舍入到最接近的 10 的倍数、舍入到 2dp、向上舍入、向下舍入、向零舍入、远离零舍入。存在许多不同形式的舍入。
  • @DavidHeffernan 好的,从技术上讲是的......当它用于代替 IMO 更准确的短语时,似乎“四舍五入”是一个通用且无用的术语。例如 1 实际上并没有在任何地方 round 。也许只有我。

标签: delphi delphi-2010


【解决方案1】:

使用Math 单元中的Ceil 函数。来自文档:

将变量向上舍入为正无穷。

调用 Ceil (如在吊顶中)以获取大于或的最小整数 等于 X。X 的绝对值必须小于 MaxInt。为了 示例:

  • Ceil(-2.8) = -2
  • Ceil(2.8) = 3
  • Ceil(-1.0) = -1

我无法判断 Ceil 的行为是否符合您对负输入值的期望,因为您没有指定在那里做什么。但是,如果Ceil 不符合您的期望,通过结合Abs()Ceil() 来编写一个满足您需求的函数很容易

【讨论】:

  • 这正是我想要的,但是 System.Math 在 win32(或仅 .net)上可用吗?
  • 在 D2010 上,它是 Math 单位。在 DXE2 或更高版本上,带有命名空间的是 System.Math
【解决方案2】:
FindField('QTY').ASFLOAT := TRUNC(FindField('QTY').ASFLOAT) + 1

工作正常

【讨论】:

  • 对负数和整数正数不太好。
  • 这个问题只是数学问题 - 数据库体操无关紧要,正如 LU RD 所说,不要返回 OP 要求的正确结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多