我一直试图围绕长浮点数,如:
32.268907563;
32.268907563;
31.2396694215;
33.6206896552;
...
Run Code Online (Sandbox Code Playgroud)
到目前为止没有成功.我试过了math.ceil(x),math.floor(x)(虽然那会向上或向下舍入,这不是我正在寻找的)并且round(x)哪些都不起作用(仍然是浮点数).
我能做什么?
编辑:代码:
for i in widthRange:
for j in heightRange:
r, g, b = rgb_im.getpixel((i, j))
h, s, v = colorsys.rgb_to_hsv(r/255.0, g/255.0, b/255.0)
h = h * 360
int(round(h))
print(h)
Run Code Online (Sandbox Code Playgroud)
fra*_*ima 312
int(round(x))
Run Code Online (Sandbox Code Playgroud)
将它舍入并将其更改为整数
编辑:
您没有将int(round(h))赋给任何变量.当你调用int(round(h))时,它返回整数但不执行任何其他操作; 你必须更改该行:
h = int(round(h))
Run Code Online (Sandbox Code Playgroud)
要将新值分配给h
小智 21
使用round(x, y).它会将您的数字向上舍入到您想要的小数位.
例如:
>>> round(32.268907563, 3)
32.269
Run Code Online (Sandbox Code Playgroud)
Jas*_*ick 18
round(value,significantDigit)是普通的解决方案,但是当圆形值结束时,这不会像数学角度那样运算5.如果在5您四舍五入的数字之后的数字中,这些值有时仅按预期向上8.005舍入(即舍入到两位小数8.01).对于由于浮点数学的怪癖而导致的某些值,它们会向下舍入!
即
>>> round(1.0005,3)
1.0
>>> round(2.0005,3)
2.001
>>> round(3.0005,3)
3.001
>>> round(4.0005,3)
4.0
>>> round(1.005,2)
1.0
>>> round(5.005,2)
5.0
>>> round(6.005,2)
6.0
>>> round(7.005,2)
7.0
>>> round(3.005,2)
3.0
>>> round(8.005,2)
8.01
Run Code Online (Sandbox Code Playgroud)
奇怪的.
假设你的意图是对科学中的统计进行传统的舍入,这是一个方便的包装器,可以使round函数按预期工作,需要import额外的东西Decimal.
>>> round(0.075,2)
0.07
>>> round(0.075+10**(-2*5),2)
0.08
Run Code Online (Sandbox Code Playgroud)
啊哈!所以基于此我们可以做一个功能......
def roundTraditional(val,digits):
return round(val+10**(-len(str(val))-1), digits)
Run Code Online (Sandbox Code Playgroud)
基本上,这会增加一个值,保证小于您尝试使用的字符串的最小给定数字round.round在大多数情况下,通过添加少量它保留了它的行为,同时现在确保数字低于被舍入的数字是否5向上舍入,如果它4向下舍入.
使用的方法10**(-len(val)-1)是故意的,因为它是你可以添加的最大的小数字来强制转换,同时还确保你添加的值永远不会改变舍入,即使.缺少小数.我可以使用10**(-len(val))一个condiditional if (val>1)来减去1更多...但更简单的是总是减去1因为这不会改变这个解决方法可以正确处理的十进制数的适用范围.如果您的值达到类型的限制,此方法将失败,这将失败,但对于几乎整个有效小数值范围,它应该起作用.
您也可以使用十进制库来完成此任务,但我建议的包装器更简单,在某些情况下可能更受欢迎.
编辑:感谢Blckknght指出5边缘情况仅针对某些值发生.此答案的早期版本也不够明确,只有当数字紧靠您正在四舍五入的数字时才会出现5奇数舍入行为.
Con*_*use 13
对于积极因素,请尝试
int(x + 0.5)
Run Code Online (Sandbox Code Playgroud)
为了使它也适用于负片,请尝试
int(x + (0.5 if x > 0 else -0.5))
Run Code Online (Sandbox Code Playgroud)
int()就像楼层功能一样,因此你可以利用这个属性.这绝对是最快的方式.
您也可以使用numpy,假设您正在使用python3.x,这是一个示例
import numpy as np
x = 2.3
print(np.rint(x))
>>> 2.0
Run Code Online (Sandbox Code Playgroud)
您的解决方案是在不指定第二个参数(小数位数)的情况下调用round
>>> round(0.44)
0
>>> round(0.64)
1
Run Code Online (Sandbox Code Playgroud)
这比一个更好的结果
>>> int(round(0.44, 2))
0
>>> int(round(0.64, 2))
0
Run Code Online (Sandbox Code Playgroud)
从https://docs.python.org/3/library/functions.html#round的Python文档中
舍入(数字[,n位数字])
返回数字舍入到小数点后的n位精度。如果省略ndigits或为None,它将返回最接近其输入的整数。
注意
针对float的round()行为可能令人惊讶:例如,round(2.675,2)给出2.67,而不是预期的2.68。这不是错误:这是由于大多数十进制小数不能完全表示为浮点数的结果。有关更多信息,请参见浮点算法:问题和限制。
| 归档时间: |
|
| 查看次数: |
343700 次 |
| 最近记录: |