将小数转换为 Python 中 1/4 的数学倍数
Convert decimal to a mathematical multiple fractions of 1/4 in Python
我想根据体重计算罩杯尺寸。
一杯定义为 240 克重量。
我需要以 1/4
的数学倍数得到 gr(十进制数)中重量 x
的杯数。
结果应该是一个字符串。
因此,可能的值应限制为:
0、1/4、1/2、3/4、1、1 1/4、1 1/2、1 3/4、2 等等。
示例:
x = 130.3
cup_size: 1/2
x = 10
cup_size: 0
x = 310
cup_size: 1 1/4
如何在 python 中实现它?
我正在阅读 Fractions 模块,但找不到我需要的内容。
应 Nathaniel 的要求,我不确定如何解决 python 中的数学问题。我认为它可以在库中存在一种方法来做到这一点。这就是我在这里问的原因。
到目前为止,我尝试的是使用 as_integer_ratio
方法进行转换:
weight = 351
unit = 240
weight_to_convert = int(round(weight/unit))
print(weight_to_convert.as_integer_ratio())
但这不起作用,只是给我最接近的整数分数的值。
以下内容可能会助您一臂之力:
def cups(val):
full, quarter = divmod(val // 60, 4)
if not (full or quarter):
return "0"
f = f"{full:.0f}" if full else ""
if quarter:
if quarter == 2:
f += " 1/2"
else:
f += f" {quarter:.0f}/4"
return f.strip()
>>> cups(130)
'1/2'
>>> cups(310)
'1 1/4'
>>> cups(10)
'0'
部分文档:
这个问题的核心是您试图 'bucket' 将可变数量的克放入一定数量的四分之一杯中,保持离散单位并避免浮动。
直接进入这个问题的核心,而不是试图确定如何处理任何除法的小数余数,您应该只问在任何给定数量中有多少四分之一杯:
quarters = val / (240 / 4) # Alternatively, (val * 4) / 240) or val / 60
现在是确定四分之余的问题了。
cups = quarters // 4
quotient = quarters % 4
以上得到杯子和四分之一杯子。现在我们打印:
if quotient == 0: # Here there is no fraction
f"cup_size = {cups}"
elif quotient == 2: # In this case we need to reduce the fraction
"cup_size = {} {} / 2".format(cups, quotient / 2)
else:
f"cup_size = {cups} {quotient} / 4"
如果您需要更抽象地处理分数,使用分数 class 是有意义的 - 但乘以除数的技巧(在本例中为四,因为四分之一杯是您的最小单位)得到你的非浮动价值。您可以放弃剩余部分。
我想根据体重计算罩杯尺寸。
一杯定义为 240 克重量。
我需要以 1/4
的数学倍数得到 gr(十进制数)中重量 x
的杯数。
结果应该是一个字符串。
因此,可能的值应限制为: 0、1/4、1/2、3/4、1、1 1/4、1 1/2、1 3/4、2 等等。
示例:
x = 130.3
cup_size: 1/2
x = 10
cup_size: 0
x = 310
cup_size: 1 1/4
如何在 python 中实现它? 我正在阅读 Fractions 模块,但找不到我需要的内容。
应 Nathaniel 的要求,我不确定如何解决 python 中的数学问题。我认为它可以在库中存在一种方法来做到这一点。这就是我在这里问的原因。
到目前为止,我尝试的是使用 as_integer_ratio
方法进行转换:
weight = 351
unit = 240
weight_to_convert = int(round(weight/unit))
print(weight_to_convert.as_integer_ratio())
但这不起作用,只是给我最接近的整数分数的值。
以下内容可能会助您一臂之力:
def cups(val):
full, quarter = divmod(val // 60, 4)
if not (full or quarter):
return "0"
f = f"{full:.0f}" if full else ""
if quarter:
if quarter == 2:
f += " 1/2"
else:
f += f" {quarter:.0f}/4"
return f.strip()
>>> cups(130)
'1/2'
>>> cups(310)
'1 1/4'
>>> cups(10)
'0'
部分文档:
这个问题的核心是您试图 'bucket' 将可变数量的克放入一定数量的四分之一杯中,保持离散单位并避免浮动。
直接进入这个问题的核心,而不是试图确定如何处理任何除法的小数余数,您应该只问在任何给定数量中有多少四分之一杯:
quarters = val / (240 / 4) # Alternatively, (val * 4) / 240) or val / 60
现在是确定四分之余的问题了。
cups = quarters // 4
quotient = quarters % 4
以上得到杯子和四分之一杯子。现在我们打印:
if quotient == 0: # Here there is no fraction
f"cup_size = {cups}"
elif quotient == 2: # In this case we need to reduce the fraction
"cup_size = {} {} / 2".format(cups, quotient / 2)
else:
f"cup_size = {cups} {quotient} / 4"
如果您需要更抽象地处理分数,使用分数 class 是有意义的 - 但乘以除数的技巧(在本例中为四,因为四分之一杯是您的最小单位)得到你的非浮动价值。您可以放弃剩余部分。