【问题标题】:Convert decimal to a mathematical multiple fractions of 1/4 in Python在 Python 中将十进制转换为 1/4 的数学倍数
【发布时间】:2021-12-13 23:19:58
【问题描述】:

我想根据重量计算罩杯尺寸。 一杯定义为 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

杯子尺寸:1/2

x = 10

杯子尺寸:0

x = 310

杯子尺寸: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())

但这不起作用,只是给我最接近的整数分数。

【问题讨论】:

  • 您希望输出为字符串,还是实际的 Fraction 对象?你不应该使用浮点对象,因为它们有舍入错误
  • 输出应该是一个字符串
  • 您应该提供一些您尝试过的代码,并解释为什么它没有按预期工作。就目前而言,您有点要求 SO 为您编写代码。
  • round(amount / 240, 3) 开头。然后编写一个函数来四舍五入到最近的四分之一杯
  • @NathanielFord 我不知道如何解决这个问题。我添加了到目前为止我尝试过的内容。

标签: python fractions


【解决方案1】:

以下内容可能会将您推向正确的方向:

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'

一些文档:

【讨论】:

  • 这是问题的确切解决方案。神奇之处在于 divmod 方法。谢谢user2390182!!!!!!
【解决方案2】:

这个问题的核心是你试图将可变数量的克“桶”到一定数量的四分之一杯中,保持离散单位并避免浮动。

直奔这个问题的核心,而不是试图确定如何处理任何除法的小数余数,您应该只问在任何给定数量中有多少四分之一杯:

​​>
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"

如果您需要更抽象地处理分数,则使用分数类会很有意义 - 但乘以除数(在本例中为四,因为四分之一杯是您的最小单位)的技巧可以让您在非浮动条款。你可以把剩下的扔掉。

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2010-12-07
    • 2013-09-27
    相关资源
    最近更新 更多