更新:到目前为止,答案显示它似乎是 OSX 上与平台相关的错误,与特定的语言环境设置有关,因为它们不完全支持分组数字。
更新 2:我刚刚在 Python 的错误跟踪器上打开了一个问题。让我们看看是否有解决此问题的方法。
我想根据德国编号约定格式化整数和浮点数。这可以使用格式语言和演示类型n
,但在我的平台上失败了。
- 平台:OS X 10.8.2(山狮)
- Python:2.7.3 64 位
(v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
例子:
1234
=>1.234
1234.56
=>1.234,56
1000000
=>1.000.000
到目前为止我已经尝试过:
设置德语语言环境
import locale locale.setlocale(locale.LC_ALL, 'de_DE')
格式规范选项
,
仅识别英文格式。'{:,}'.format(1234) '1,234' '{:,}'.format(1234.56) '1,234.56' '{:,}'.format(1000000) '1,000,000'
根据Python 文档,整数和浮点表示类型
n
应该做我想做的事,但事实并非如此。'{:n}'.format(1234) '1234' '{:n}'.format(1234.56) '1234,56' # at least the comma was set correctly here '{:n}'.format(1000000) '1000000' '{:n}'.format(12345769.56) '1,23458e+07' # it's doing weird things for large floats
受@JFSebastian启发的更多示例和比较:
for n in [1234, 1234.56, 1000000, 12345769.56]: print('{0:,} {0:n}'.format(n)) fmt, val = "%d %f", (n, n) print(fmt % val) print(locale.format_string(fmt, val)) print(locale.format_string(fmt, val, grouping=True)) print('-'*60)
这会在我的平台上产生以下错误结果:
1,234 1234 1234 1234.000000 1234 1234,000000 1234 1234,000000 ------------------------------------------------------------ 1,234.56 1234,56 1234 1234.560000 1234 1234,560000 1234 1234,560000 ------------------------------------------------------------ 1,000,000 1000000 1000000 1000000.000000 1000000 1000000,000000 1000000 1000000,000000 ------------------------------------------------------------ 12,345,769.56 1,23458e+07 12345769 12345769.560000 12345769 12345769,560000 12345769 12345769,560000 ------------------------------------------------------------
我没有得到的正确结果如下所示:
1,234 1.234 1234 1234.000000 1234 1234,000000 1.234 1.234,000000 ------------------------------------------------------------ 1,234.56 1.234,56 1234 1234.560000 1234 1234,560000 1.234 1.234,560000 ------------------------------------------------------------ 1,000,000 1.000.000 1000000 1000000.000000 1000000 1000000,000000 1.000.000 1.000.000,000000 ------------------------------------------------------------ 12,345,769.56 1,23458e+07 12345769 12345769.560000 12345769 12345769,560000 12.345.769 12.345.769,560000 ------------------------------------------------------------
你有一个只使用格式语言的解决方案吗?有什么方法可以欺骗我平台上的区域设置以接受分组?