python:如何将货币转换为十进制?

l--*_*''' 16 python

我在字符串变量中有美元

dollars = '$5.99'
Run Code Online (Sandbox Code Playgroud)

我如何将其转换为十进制而不是字符串,以便我可以用它来添加美元呢?

Amb*_*ber 20

如果你只想要一个整数美分:

cents_int = int(round(float(dollars.strip('$'))*100))
Run Code Online (Sandbox Code Playgroud)

如果你想要一个十进制,只需使用...

from decimal import Decimal
dollars_dec = Decimal(dollars.strip('$'))
Run Code Online (Sandbox Code Playgroud)

如果您知道美元符号将始终存在,您可以使用dollars[1:]而不是dollars.strip('$'),但使用strip()let还可以处理省略美元符号的字符串(5.99而不是$5.99).

  • 如果你更喜欢整数美分,那么一直保持积分:`d,c = dollars.strip('$').split('.',2); 美分= int(d)*100 + int(c.strip()[:2])`.当然,这假设您想要将小数分数向0舍入(在此插入超人III的笑话). (3认同)

小智 12

假设存储在变量中的字符串dollars是使用python的locale模块生成的.将其转换回float(十进制)的一种可能更清晰的方法是使用atof同一模块中的函数.只要您setlocale在两个方向上使用相同的参数(从货币到字符串,反之亦然),它就应该工作.

例如:

import locale
locale.setlocale(locale.LC_ALL, '')
value = 122445.56
value_s = locale.currency(value, grouping=True)
#generates $122,445.56
Run Code Online (Sandbox Code Playgroud)

将其转换回来:

value2 = locale.atof(value_s[1:])
#value2 = 122445.56 
value == value2 #True
Run Code Online (Sandbox Code Playgroud)

  • 这是考虑到逗号作为千位分隔符的可能性的唯一答案,但它也会转换为浮点数而不是小数,这会导致精度损失。 (2认同)

lll*_*kke 8

有一个简单的方法:

dollar_dec = float(dollars[1:])
Run Code Online (Sandbox Code Playgroud)

  • 将货币存储为浮动通常是个坏主意.您可能会很容易丢失精度并将数据暴露给舍入错误.现在,如果您正在寻找超人III一些额外的钱,并将其汇入你自己的副账户...... (11认同)
  • 又名办公空间;如果幸运的话,您最终不必烧毁建筑物。 (2认同)

Bri*_*ell 7

我知道这是一个老问题,但这是解决您的问题的一种非常简单的方法,易于阅读:

为了:

dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */
Run Code Online (Sandbox Code Playgroud)

它还适用于其中可能包含逗号的较大数字:

dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim 5

如果要使用十进制:

from decimal import Decimal
dollars = Decimal(dollars.strip('$'))
Run Code Online (Sandbox Code Playgroud)

从那里添加非常简单

dollars += 1 # Would add 1 to your decimal
Run Code Online (Sandbox Code Playgroud)