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

时间:2010-10-08 03:22:12

标签: python

我在字符串变量中有美元

dollars = '$5.99'

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

10 个答案:

答案 0 :(得分:19)

如果你更喜欢整数分钱:

cents_int = int(round(float(dollars.strip('$'))*100))

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

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

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

答案 1 :(得分: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

将其转换回来:

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

答案 2 :(得分:5)

有一种简单的方法:

dollar_dec = float(dollars[1:])

答案 3 :(得分:4)

如果你想使用十进制:

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

从那里添加非常简单

dollars += 1 # Would add 1 to your decimal

答案 4 :(得分:3)

通过十进制包

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

答案 5 :(得分:1)

如果您只是要添加(而不是乘法或除法),请考虑仅存储美分而不是美元而不使用小数包。我建议使用最简单的工具,如果只是增加美元和美分,则十进制不提供任何值。

答案 6 :(得分:1)

我知道这是一个老问题,但这是一个非常简单的方法来解决你的问题:

有:

dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */

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

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

答案 7 :(得分:0)

首先,剥掉'$'字符。如果它始终是第一个角色,那很容易:

dollars[1:]

为了保持美分的完美而不必担心浮点数中美分的非完美表示,你需要使用十进制值:

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

答案 8 :(得分:0)

如果你想把钱留在美分中以便轻松舍入,有时会丢失“$”:

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))

答案 9 :(得分:0)

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

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_HALF_UPROUND_HALF_DOWNROUND_UP

相关问题