英文:
How to increase a float to the next multiple of 0.5
问题
我想将我的 float
值增加到它之后的第一个0.5的倍数。
例如,如果我有:float x = 3.397;
我希望它变为:x = 3.5;
。或者,如果我有:float x = 7.895;
它应该变为 x = 8.0;
。
英文:
I would like to increase my float
value to the first multiple of 0.5 after it.
For example, if I have: float x = 3.397;
I would like it to become: x = 3.5;
. Or, if I have: float x = 7.895;
it should become x = 8.0;
.
答案1
得分: 1
简单明了,但在每个细节中都隐藏着错误。
float nextHalf(float x) {
// 已更正为:long n = Math.round(x * 2.0) + 1;
return (float) (Math.ceil(x * 2.0) / 2);
}
经过 @chux-ReinstateMonica 的更正。
由于舍入方法round/floor/ceil会以整数单位为目标进行舍入,对于0.5,必须先将数字乘以2,然后再除以2。
当然,由于浮点数中的指数在一些较大的数字中,连续数字之间的差异不再低于1.0,因此在这种情况下:
nextHalf(x) == nextHalf(x + 1.0)
英文:
Quite simple, but in every detail errors are hidden.
float nextHalf(float x) {
// CORRECTED THIS: long n = Math.round(x * 2.0) + 1;
return (float) (Math.ceil(x * 2.0) / 2);
}
With corrections due to @chux-ReinstateMonica.
As rounding methods round/floor/ceil target integer units of 1, for 0.5 one must first scale the numbers by a factor 2 and afterwards divide by 2.
Of course because of the incorporated exponent in a floating point number at some large numbers the difference between successive numbers is no longer below 1.0 so then
nextHalf(x) == nextHalf(x + 1.0)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论