【问题标题】:How to increase a float to the next multiple of 0.5 [duplicate]如何将浮点数增加到 0.5 的下一个倍数 [重复]
【发布时间】:2020-10-21 15:35:39
【问题描述】:

我想将我的 float 值增加到它之后的 0.5 的第一个倍数。

例如,如果我有:float x = 3.397;,我希望它变成:x = 3.5;。或者,如果我有:float x = 7.895;,它应该变成x = 8.0;

【问题讨论】:

  • 是的,您的要求很明确。不清楚的是你有什么问题或者你想问什么问题。
  • 乘以2,四舍五入,除以2
  • @Seelenvirtuose 我不知道该怎么做我想做的事
  • 或许ceil(d * 2)/2?
  • 0.5的结果应该是什么? xxxx.5 无法表示的范围内的大值?

标签: java floating-point


【解决方案1】:

很简单,但每个细节都隐藏了错误。

float nextHalf(float x) {
    // CORRECTED THIS: long n = Math.round(x * 2.0) + 1;
    return (float) (Math.ceil(x * 2.0) / 2);
}

由于@chux-ReinstateMonica 进行了更正。

作为舍入方法,rou​​nd/floor/ceil 以 1 为整数单位,对于 0.5,必须先将数字缩放 2 倍,然后再除以 2。

当然,由于在某些大数的浮点数中合并了指数,因此连续数字之间的差不再低于 1.0,所以

nextHalf(x) == nextHalf(x + 1.0)

【讨论】:

  • @chux-ReinstateMonica 我的错半心半意地阅读这个问题。更正为没有其他答案
  • 对于ceil(),它返回doublelong n 是不必要的限制。也许double n 并避免“浮动可能会溢出很长时间”的问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多