【问题标题】:Python 3 - convert string into a numberPython 3 - 将字符串转换为数字
【发布时间】:2015-10-22 20:24:54
【问题描述】:

我正在使用 python 和 django,但我遇到了这个问题:我有不同的变量来存储一个对象的价格,所有这些变量的格式都像 350.32182.40 等...

我的问题是这些数字是字符串,但在我的函数中,我必须将它们相加才能达到总数,python 不会让我这样做,因为它不能对字符串求和。我试过int()float()format()Decimal(),但它们总是给我一个只有一个十进制数字或其他不正确值的值。我需要 2 个十进制数字,并且我需要将它们全部相加。我该怎么做?

PS:对不起,我是意大利人。

【问题讨论】:

  • 如果这些变量是 Django 模型字段,您是否考虑过将它们设为 DecimalFields 而不是现在的任何字段类型?
  • 问题解决了,我使用 float(number) 来对所有价格求和,它工作正常,然后对于 2 位小数,在我的 html 页面中我使用 {{ total_price|floatformat:2 }}。

标签: python django int sum decimal


【解决方案1】:

十进制似乎对我有用。

如果这些是价格,请不要将它们存储为浮点数...floats will not give you exact numbers for decimal amounts like prices

>>> from decimal import Decimal
>>> a = Decimal('1.23')
>>> b = Decimal('4.56')
>>> c = a + b
>>> c
Decimal('5.79')

【讨论】:

  • @假设a='50.13342'。有可能绕过这个吗?当我尝试>>>from decimal import Decimal >>>round(Decimal('123.1231231', 2)) 时,由于某种原因它返回123.0。我正在使用 Python 3.4.0。即使我尝试>>>round(Decimal('123.1231231', 5)),它也会返回相同的内容 (123.0)。
  • @user2719875 尝试将 2 或 5 分配给 round 而不是 Decimal
【解决方案2】:

我使用的是 Python 3.4.0,这对我有用:

>>>a = '350.32'
>>>float(a)
350.32

要将其四舍五入到小数点后两位,请执行以下操作:

>>>b = '53.4564564'
>>>round(float(b), 2)
53.46

【讨论】:

  • OP 说这些是价格。 Storing prices as floats is bad
  • @ppperry 是的。实际上,我发布此内容只是为了表明我使用的是 Python 3.4.0,并且转换确实对我有用。
【解决方案3】:
import re

eggs = "12.4, 15.5, 77.2"

print(sum(map(float, re.split("\s*,\s*", eggs))))

【讨论】:

    【解决方案4】:

    这将完美的十进制值保留到小数点后五位

    import random
    from decimal import Decimal  
    
    def myrandom():
        for i in range(10):
            Rand = Decimal(random.random()* (0.909 - 0.101) + 0.101)
            Rand = '{0:0.5f}'.format(Rand)
            print (Rand)
    
    myrandom()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2015-10-27
      • 1970-01-01
      • 2018-08-06
      • 2017-07-22
      相关资源
      最近更新 更多