【发布时间】:2010-10-08 03:22:12
【问题描述】:
我在一个字符串变量中有美元
dollars = '$5.99'
如何将其转换为小数而不是字符串,以便可以对其进行操作,例如向其添加美元?
【问题讨论】:
标签: python
我在一个字符串变量中有美元
dollars = '$5.99'
如何将其转换为小数而不是字符串,以便可以对其进行操作,例如向其添加美元?
【问题讨论】:
标签: python
如果您只喜欢整数美分:
cents_int = int(round(float(dollars.strip('$'))*100))
如果你想要一个小数,只需使用...
from decimal import Decimal
dollars_dec = Decimal(dollars.strip('$'))
如果您知道美元符号将一直存在,您可以使用dollars[1:] 代替dollars.strip('$'),但使用strip() 还可以处理省略美元符号的字符串(5.99 而不是@987654327 @)。
【讨论】:
d, c = dollars.strip('$').split('.', 2); cents = int(d) * 100 + int(c.strip()[:2])。当然,这假设您想将分数舍入为 0(在此处插入超人 III 的笑话)。
假设存储在变量dollars 中的字符串是使用python 的语言环境模块生成的。将其转换回浮点数(十进制)的一种可能更简洁的方法是使用同一模块中的 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
【讨论】:
有一个简单的方法:
dollar_dec = float(dollars[1:])
【讨论】:
如果你想使用十进制:
from decimal import Decimal
dollars = Decimal(dollars.strip('$'))
从那里添加非常简单
dollars += 1 # Would add 1 to your decimal
【讨论】:
我知道这是一个老问题,但这是解决您的问题的一种非常简单且易于阅读的方法:
为:
dollars = '$5.99'
dollars = dollars.replace("$","").replace(",","")
/* 5.99 */
它也适用于可能包含逗号的较大数字:
dollars = '1,425,232.99'
dollars = dollars.replace("$","").replace(",","")
/* 1425232.99 */
【讨论】:
通过十进制包
>>> dollars = '$5.99'
>>> import decimal
>>> decimal.Decimal(dollars[1:])
Decimal('5.99')
>>>
【讨论】:
如果您只打算进行加法(而不是乘法或除法),请考虑只存储美分而不是美元,而不是使用小数包。我建议使用最简单的工具来完成这项工作,如果您只是添加美元和美分,十进制不会提供任何价值。
【讨论】:
首先,去掉“$”字符。如果它始终是第一个字符,那很容易:
dollars[1:]
为了保持美分完美而不用担心浮点中美分的不完美表示,您需要使用 Decimal 值:
from decimal import *
Decimal(dollars[1:])
【讨论】:
如果您想将钱以美分表示以便于四舍五入,但有时会缺少“$”:
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))
【讨论】:
这是另一个将杂乱的货币字符串转换为四舍五入到美分的小数的示例:
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_UP、ROUND_HALF_DOWN、ROUND_UP
【讨论】: