【问题标题】:how to test if a number is divisible by a decimal less than 1? (54.10 % .10)如何测试一个数字是否可以被小于1的小数整除? (54.10 % .10)
【发布时间】:2015-08-18 05:41:26
【问题描述】:

我正在尝试测试 float 即(54.10)是否可以被 0.10 整除。 54.10 % .10 返回 .10 而不是 0,为什么会这样,我怎样才能让它做我想做的事情?

【问题讨论】:

标签: python decimal division modulus


【解决方案1】:

这里久经考验的真正方法是将除数和除数乘以 10 的幂。实际上,54.10 变为 541,0.10 变为 1。然后您可以使用标准模数或上限和下限来实现所需的结果。

【讨论】:

    【解决方案2】:

    您可以使用decimal 模块来避免浮点精度问题:

    >>> import decimal
    >>> decimal.Decimal('54.10') % decimal.Decimal('0.10')
    Decimal('0.00')
    

    【讨论】:

    • 实际上由于 Decimal 使程序减慢了很多,我决定只测试字符串形式的最后一个数字:str(54.10)[-1] == '0'
    • 请记住,在上述解决方案中声明十进制数字时,您使用的是字符串输入,例如decimal.Decimal(str(54.10)) & Decimal(str(0.10)),否则结果将不是十进制('0.00'),而是十进制('0.099999999999999842348330503228')。 “从整数或浮点数构造执行该整数或浮点数的精确转换。” - docs.python.org/3/library/decimal.html#quick-start-tutorial
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 2012-12-28
    相关资源
    最近更新 更多