【发布时间】:2012-06-26 13:57:07
【问题描述】:
我想将浮点数四舍五入到给定的精度,例如:
0.051 i want to convert it to
0.1
0.049 i want to convert it to
0.0
0.56 i want to convert it to
0.6
0.54 i want to convert it to
0.5
我无法更好地解释它,但这样做的原因是将点位置(如 0.131f、0.432f)转换为网格中瓦片的位置(如 0.1f、0.4f)。
【问题讨论】:
-
将浮点数四舍五入到小数点后一位或多位没有多大意义;像
0.1这样的数字不能用二进制浮点数精确表示。可以对输出进行舍入(到字符串或文件)。 -
我们在 IT 部门,我们试图用代码行来表示现实世界的无限可能性,在这里一切都有意义。我将它用于游戏中的无限滚动背景,失去精度并不重要。
-
我已经对此进行了测试,但它似乎无法正常工作。如果您尝试舍入 127,它会返回 128(我使用 double 而不是 float 来表示 f 和返回类型)。
-
@BlunT ,可能你没有得到函数的意义,你传递的精度是多少?如果您输入 2,您将得到 128,因为您将从 0,2,4,6...,128,130...(2 作为增量)中获得最接近的数字,如果您通过 127.456 和精度 0.01f,您将获得 127.46因为 127.46 最接近 0,0.01,0.02f.....127.45,127.46,127.47(0.01 作为增量)
-
@SteveL 那么在这种情况下你是对的,因为函数向上舍入到最接近的对数,我使用 2 作为精度。尽管如此,我认为问题的标题可能具有误导性。在我看来,考虑到其他编程语言中的round的其他实现,精度是指小数位数。