Python 转换印度/美国符号中的数字以值的变化结束
我试图用印度/美国的符号表示数字,但我给出的值和输出不一样。请检查代码Python 转换印度/美国符号中的数字以值的变化结束,python,python-3.x,Python,Python 3.x,我试图用印度/美国的符号表示数字,但我给出的值和输出不一样。请检查代码 import locale result = 1 for i in range(1,65): result = result*i print (result) output: 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000 print(f'{result:,}') output:
import locale
result = 1
for i in range(1,65):
result = result*i
print (result)
output: 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
print(f'{result:,}')
output: 126,886,932,185,884,164,103,433,389,335,161,480,802,865,516,174,545,192,198,801,894,375,214,704,230,400,000,000,000,000
locale.setlocale(locale.LC_MONETARY, 'en_IN')
print(locale.currency(result, grouping=True))
output:₹1,26,88,69,32,18,58,84,16,54,37,80,68,97,58,51,22,92,52,90,11,90,29,06,47,05,20,97,78,50,85,45,10,34,77,59,05,11,63,70,67,40,17,89,440.00
locale.setlocale(locale.LC_MONETARY, 'en_US')
print(locale.currency(result, grouping=True))
output:$126,886,932,185,884,165,437,806,897,585,122,925,290,119,029,064,705,209,778,508,545,103,477,590,511,637,067,401,789,440.00
如果您注意到使用print(f'{result:,}')
时,result的值没有改变,但问题在于locale包的结果和输出从12688693218588416
改变
问题:
1.为什么值会发生变化
2.如何更正此问题?看起来
locale.currency()
正在将您的输入转换为float。我不知道如何解决这个问题,但您可以使用以下替代方法:
import locale
def big_money(val, loc):
locale.setlocale(locale.LC_MONETARY, loc)
retval = locale.localeconv()["currency_symbol"] + locale.format_string("%i", val, grouping=True, monetary=True)
locale.setlocale(locale.LC_MONETARY, "")
return retval
result = 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
print(big_money(result, "en_IN"))
print(big_money(result, "en_US"))
这给了我:
?1,26,88,69,32,18,58,84,16,41,03,43,33,89,33,51,61,48,08,02,86,55,16,17,45,45,19,21,98,80,18,94,37,52,14,70,42,30,40,00,00,00,00,00,000
$126,886,932,185,884,164,103,433,389,335,161,480,802,865,516,174,545,192,198,801,894,375,214,704,230,400,000,000,000,000
事实上,考虑到这一点,我认为这种方法根本不应该影响当地人,所以请使用:
import locale
def big_money(val):
return locale.localeconv()["currency_symbol"] + locale.format_string("%i", val, grouping=True, monetary=True)
result = 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
locale.setlocale(locale.LC_MONETARY, "en_IN")
print(big_money(result))
locale.setlocale(locale.LC_MONETARY, "en_US")
print(big_money(result))
最后,你仍然会得到:
?1,26,88,69,32,18,58,84,16,41,03,43,33,89,33,51,61,48,08,02,86,55,16,17,45,45,19,21,98,80,18,94,37,52,14,70,42,30,40,00,00,00,00,00,000
$126,886,932,185,884,164,103,433,389,335,161,480,802,865,516,174,545,192,198,801,894,375,214,704,230,400,000,000,000,000
逗号不用于表示数字内的间距。请尝试使用下划线(
)@Arandomcoder OP并没有试图用逗号表示间距,这些值是Python使用本地化打印出来的。啊,我现在明白了。感谢您的澄清@MattDMolocale.currency()
显然是在将您的值转换为浮点值-它只有大约16位精度。我猜问题与转换为浮点值有关,而浮点值本质上是不精确的。看到和