将浮点数限制在两位小数。

2348

12
嗯...你是在尝试表示货币吗?如果是的话,你不应该使用浮点数表示美元。你可以使用浮点数表示便士,或者你正在尝试建模的最小通用货币单位,但最佳实践是使用十进制表示法,正如HUAGHAGUAH在他的答案中建议的那样。 - SingleNegationElimination
89
不要将货币表示为浮点数,而应该使用整数来表示分或美分数额。浮点数不够精确,而整数能够准确地表示货币数值。因此,整数是正确表示货币的方法。 - Davoud Taghawi-Nejad
5
基本上不需要(大多数情况下),用以分为单位的整数或者以便士为单位是很可靠的。这是代表货币的行业标准。如果你知道你在做什么,对浮点算术和Python的十进制类有充分的了解,可能会使用十进制表示法。但这取决于你的问题。你需要任意精度的小数吗?还是只需要两位数字?如果是两位数字:整数足矣。它会避免让你陷入麻烦。出处:我曾在银行软件咨询公司工作过。 - Davoud Taghawi-Nejad
35
我可能来得有点晚了,但我想问一下,Python的开发者已经解决了这个问题吗?因为当我执行round(13.949999999999999, 2)时,结果就是13.95。我已经在Python 2.7.6和3.4中尝试了一下,都可以工作。不确定2009年是否已经有Python 2.7版本。也许这只是Python 2.5的问题? - bad_keypoints
10
是的,Python 2.7.0+ 已经解决了舍入问题。更多信息请参见我的回答 - hynekcer
显示剩余6条评论
37个回答

3

我看到的答案对于浮点数(52.15)的情况无法解决。经过一些测试,我找到了以下解决方案:

import decimal
        
def value_to_decimal(value, decimal_places):
    decimal.getcontext().rounding = decimal.ROUND_HALF_UP  # define rounding method
    return decimal.Decimal(str(float(value))).quantize(decimal.Decimal('1e-{}'.format(decimal_places)))

将'value'转换为浮点数然后再转换为字符串非常重要,这样,'value'可以是浮点型、十进制型、整型或字符串类型!

希望这能对任何人有所帮助。


0

为了计算,我使用一个截断值的函数,也许可以帮助你

import math


def truncate(number, digits) -> float:
    stepper = pow(10.0, digits)
    return math.trunc(stepper * number) / stepper


print(truncate((0.1 + 0.2), 2))

0

一行代码实现打印百分比:

k - 分子

n - 分母

'%.2f' - 表示你想要保留两位小数的精度

*100 - 将数字从小数转换为百分数

   percentage = lambda k, n: '%.2f' % (k/n*100)

   - equivalent to-

   def percentage(k,n):
       return '%.2f' % (k/n*100)

percentage(1,3)

输出 -> '33.33'


0

只需使用此函数并将字节作为输入传递给它:

def getSize(bytes):
    kb = round(bytes/1024, 4)
    mb = round(kb/1024, 4)
    gb = round(mb/1024, 4)
    if(gb > 1):
        return str(gb) + " GB"
    elif(mb > 1):
        return str(mb) + " MB"
    else:
        return str(kb) + " KB"

这是我能想到的最简单的动态将数据大小从字节转换为KB、MB或GB的方法。


0
def custom_round(number, decimal_places):
    multiplier = 10 ** decimal_places
    rounded_number = round(number * multiplier) / multiplier
    return rounded_number

result = custom_round(13.9456789, 2)  # Rounds to 2 decimal places
print(result)  # Output will be 13.95

请不要只发布代码,并解释为什么您认为这是最佳解决方案。人们应该从您的答案中学习,如果他们只是复制粘贴代码而不知道为什么要使用它,那么学习的效果可能不会产生。 - undefined

-5

先将a转换为浮点数:

round(float(a), 2)

-19

我使用的方法是字符串切片。这是相对快速和简单的。

首先,将浮点数转换为字符串,然后选择所需的长度。

float = str(float)[:5]

在上面的单行代码中,我们将值转换为字符串,然后仅保留其前四个数字或字符(包括在内)。
希望这可以帮到你!

2
请不要在多个问题中发布相同的答案。 - vaultah
20
哇...tdh...请不要制作任何会计软件...如果数字恰好是113.94会发生什么?这将导致113.9...缺少0.04...此外,这个问题已经有超过5年的答案了... - Angry 84

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接