我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:
我需要一种方法将浮点数四舍五入到指定的小数位数,但我希望总是向下取整。
例如,不要这样:
>>> round(2.667, 2)
2.67
我宁愿拥有
>>> round_down(2.667, 2)
2.66
在 quantize
和 ROUND_FLOOR
中,你有一个朋友
>>> from decimal import Decimal,ROUND_FLOOR
>>> float(Decimal(str(2.667)).quantize(Decimal('.01'), rounding=ROUND_FLOOR))
2.66
>>> float(Decimal(str(-2.667)).quantize(Decimal('.01'), rounding=ROUND_FLOOR))
-2.67
ROUND_DOWN
。正如interjay在评论中提到的,ROUND_DOWN
向零舍入,因此对于负数可能会返回不正确的值。>>> from decimal import Decimal,ROUND_DOWN
>>> Decimal(str(2.667)).quantize(Decimal('.01'), rounding=ROUND_DOWN)
Decimal('2.66')
>>> float(Decimal(str(2.667)).quantize(Decimal('.01'), rounding=ROUND_DOWN))
2.66
ROUND_DOWN
向零舍入,这个命名非常具有误导性。ROUND_FLOOR
将向负无穷方向舍入。 - interjay以下内容适用于您想要处理的任何位数:
>>> import math
>>> def round_down(num,digits):
factor = 10.0 ** digits
return math.floor(num * factor) / factor
>>> round_down(2.667,2)
2.66
int
而不是 math.floor
,以避免导入。 - R Nar你可以使用math.floor
函数来将数字“向下舍入”到最接近的整数。所以,要将数字舍入到小数点后第三位,你可以尝试使用math.floor(1000 * number) / 1000
。
一般来说,要将数字num
舍入到精度n
,可以尝试以下方法:
from math import floor
def round_down(num, n):
multiplier = pow(10,n)
return floor(num * multiplier) / multiplier
您还可以使用字符串来玩弄它
def round_down(num, prec):
if isinstance(num, float):
s = str(num)
return float(s[:s.find('.') + prec + 1])
else:
raise ValueError
round_down(2.6667, 2)
# 2.66
int(2.667 * 100) / 100
- HamZaround_down(-2.667, 2)
,你希望得到什么结果?(即,对于负数,"down" 应该表示什么意思?) - Mark Dickinson