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

python:如何将货币转换为十进制?,python,Python,我在一个字符串变量中有美元 dollars = '$5.99' 如何将其转换为十进制而不是字符串,以便对其进行操作,如向其添加美元?如果您希望只使用整数美分: cents_int = int(round(float(dollars.strip('$'))*100)) 如果你想要一个小数点,就用 from decimal import Decimal dollars_dec = Decimal(dollars.strip('$')) 如果您知道美元符号始终存在,您可以使用dollars[1:

我在一个字符串变量中有美元

dollars = '$5.99'

如何将其转换为十进制而不是字符串,以便对其进行操作,如向其添加美元?

如果您希望只使用整数美分:

cents_int = int(round(float(dollars.strip('$'))*100))
如果你想要一个小数点,就用

from decimal import Decimal
dollars_dec = Decimal(dollars.strip('$'))

如果您知道美元符号始终存在,您可以使用
dollars[1://code>而不是
dollars.strip(“$”)
,但是使用
strip()
还可以处理忽略美元符号的字符串(
5.99
而不是
$5.99
)。

如果要使用十进制:

from decimal import Decimal
dollars = Decimal(dollars.strip('$'))
从这里开始,添加非常简单

dollars += 1 # Would add 1 to your decimal

首先,去掉“$”字符。如果总是第一个字符,这很简单:

dollars[1:]
要使美分保持完美,而不必担心浮点中美分的非完美表示,您需要使用十进制值:

from decimal import *
Decimal(dollars[1:])

通过十进制程序包

>>> dollars = '$5.99'
>>> import decimal
>>> decimal.Decimal(dollars[1:])
Decimal('5.99')
>>> 

<>如果你只想增加(而不是乘法或分割),考虑只存储美分而不是美元,而不使用十进制包。我建议使用最简单的工具来完成这项工作,如果您只是添加美元和美分,十进制不会提供任何价值。

如果您希望将钱保留为美分,以便进行四舍五入,并且有时缺少“$”:

for dollars in ('$5.99','6.77'):
    cents = int(float((dollars[1:] if dollars.startswith('$') else dollars))*100)
    print '%s = %i cents = %i dollars and %i cents' % ((dollars, cents)+divmod(cents, 100))

有一个简单的方法:

dollar_dec = float(dollars[1:])

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

例如:

import locale
locale.setlocale(locale.LC_ALL, '')
value = 122445.56
value_s = locale.currency(value, grouping=True)
#generates $122,445.56
要将其转换回:

value2 = locale.atof(value_s[1:])
#value2 = 122445.56 
value == value2 #True

我知道这是一个老问题,但这是解决问题的一个非常简单的方法,很容易理解:

用于:

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

dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */

下面是另一个将杂乱的货币字符串转换为四舍五入到美分的小数的示例:

from decimal import Decimal, ROUND_DOWN

messy = ',   $1, 111.2199  ,,,'

less_messy = Decimal(''.join(messy.replace(',','').split()).replace('$',''))
converted = less_messy.quantize(Decimal(".01"), rounding=ROUND_DOWN)

print(converted)
1111.21

其他舍入选项包括:
ROUND\u HALF\u UP
ROUND\u HALF\u DOWN
ROUND\u UP

如果您喜欢整数美分,请始终保持整数:
d,c=dollars.strip(“$”).split(“,”,2);美分=int(d)*100+int(c.strip()[:2])
。当然,这是假设你想将分数美分四舍五入到0(在这里插入超人III的选择)。小数选项是一个选择。我会开个2美分的玩笑,但现在已经晚了。把货币存储为浮动货币通常是个坏主意。您可能会丢失精度,并很容易将数据暴露在舍入错误中。现在,如果你想向《超人III》寻求一些额外的资金,并将其存入你自己的一个账户……又称办公空间;如果幸运的话,你最终不会烧毁这座建筑。这是唯一考虑到逗号作为千位分隔符的可能性的答案,但它也会转换为浮点而不是小数,这会导致精度损失。
from decimal import Decimal, ROUND_DOWN

messy = ',   $1, 111.2199  ,,,'

less_messy = Decimal(''.join(messy.replace(',','').split()).replace('$',''))
converted = less_messy.quantize(Decimal(".01"), rounding=ROUND_DOWN)

print(converted)
1111.21