Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.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_Printing - Fatal编程技术网

Python 支持区域设置的方法,用于打印带有逗号和小数的大数字

Python 支持区域设置的方法,用于打印带有逗号和小数的大数字,python,printing,Python,Printing,关于如何打印带有逗号和/或小数位的数字,有许多公认的答案,例如等等 出于某种原因,我无法找到一个明确的答案,说明如何以区域设置感知的方式对带小数的大数字执行此操作,而不强制我以精确的方式进行硬编码(例如,在读取文件并从中打印值时,事先不知道数字的大小或精确程度) 为了使事情变得更复杂,我还希望以Python 2.7/3.x交叉兼容的方式来实现这一点 因此,如果我有一个像1000000.01这样的数字,我希望它打印为“1000000.01”,而1000000.00001打印为“1000000.00

关于如何打印带有逗号和/或小数位的数字,有许多公认的答案,例如等等

出于某种原因,我无法找到一个明确的答案,说明如何以区域设置感知的方式对带小数的大数字执行此操作,而不强制我以精确的方式进行硬编码(例如,在读取文件并从中打印值时,事先不知道数字的大小或精确程度)

为了使事情变得更复杂,我还希望以Python 2.7/3.x交叉兼容的方式来实现这一点

因此,如果我有一个像
1000000.01
这样的数字,我希望它打印为“1000000.01”,而
1000000.00001
打印为“1000000.00001”

以下是我尝试过但不起作用的方法:

(使用标准)

根据文档,
“{:n}”
听起来像我想要的,但实际上似乎不起作用<代码>“{:,}”给出了所需的结果,但似乎不了解区域设置(根据列出的文档;需要对此进行澄清)

(使用
locale

似乎
locale.format(“%g”,…)
与我想要的最接近,但似乎无法正常工作:

print(locale.format("%g", 1000.01, grouping = True)) # 1,000.01 ; works but only for small numbers
print(locale.format("%g", 10000.01, grouping = True)) # 10,000 ; doesn't work, loses decimal
似乎
local.format
中缺少
n
格式化程序


有什么想法吗?似乎真的很奇怪,至少到目前为止,我已经找到了一个通用的方法来解决这个问题。

我的意思是,你可以在小数点处拆分并单独计算。这可能不太理想,但确实有效

# `input` is your number, `output` is the formatted string.
import locale #import
sep = '.' if locale.localeconv()['thousands_sep'] == ',' else ',' #get locale sep
parts = str(input).split(sep) #get part before and after the sep
parts[0] = locale.format("%d", parts[0], grouping=True) #format **part 0**
output = sep.join(parts) #rejoin
我想这就行了


这里最重要的部分是调用
locale.localeconv()['0000sep']
,它获取值分隔符。然后,在同一行上反转它,使逗号变成句点,反之亦然。

”{:n}“
听起来像我想要的,但实际上似乎不起作用。”。。。我可能错过了一些东西,但它怎么不起作用呢?
“{:n}”。format(1000000.01)
返回
'1e+06'
对不起,
“{:,}”
怎么不起作用?
“{:,}”
不支持区域设置,并且不适用于千位分隔符为
且不为
的系统。除非我读错了文档?难道第二个答案不能解决这个问题吗?我可能又漏掉了一些东西,但是普通的
print(“{:,}”).format(x))
适合我,不需要任何麻烦…@Julien你确定吗?我没有测试,所以我可能是错的,但我相信这是正确的。没关系,我重新阅读了问题,我现在明白了!我编辑了我的答案来工作!(我想…我仍然无法测试)@user5359531输入是您的非格式化数字,输出是格式化字符串。
print(locale.format("%g", 1000.01, grouping = True)) # 1,000.01 ; works but only for small numbers
print(locale.format("%g", 10000.01, grouping = True)) # 10,000 ; doesn't work, loses decimal
# `input` is your number, `output` is the formatted string.
import locale #import
sep = '.' if locale.localeconv()['thousands_sep'] == ',' else ',' #get locale sep
parts = str(input).split(sep) #get part before and after the sep
parts[0] = locale.format("%d", parts[0], grouping=True) #format **part 0**
output = sep.join(parts) #rejoin