Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换印度/美国符号中的数字以值的变化结束_Python_Python 3.x - Fatal编程技术网

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使用本地化打印出来的。啊,我现在明白了。感谢您的澄清@MattDMo
locale.currency()
显然是在将您的值转换为浮点值-它只有大约16位精度。我猜问题与转换为浮点值有关,而浮点值本质上是不精确的。看到和