我在Win10下。这是我的小脚本:
import locale
locale.setlocale(locale.LC_NUMERIC,"rus")
print locale.localeconv()
fv = 2.5
print str(fv)
打印出来:
{'mon_decimal_point': '', 'int_frac_digits': 127, 'p_sep_by_space': 127, 'frac_digits': 127, 'thousands_sep': '\xa0', 'n_sign_posn': 127, 'decimal_point': ',', 'int_curr_symbol': '', 'n_cs_precedes': 127, 'p_sign_posn': 127, 'mon_thousands_sep': '', 'negative_sign': '', 'currency_symbol': '', 'n_sep_by_space': 127, 'mon_grouping': [], 'p_cs_precedes': 127, 'positive_sign': '', 'grouping': [3, 0]}
2.5
我们看到小数点是',';那么为什么2,5打印为2.5 ??
由于
答案 0 :(得分:1)
您需要调用locale.str
方法,而不是普通的str
构造函数。
import locale
locale.setlocale(locale.LC_NUMERIC,"ru_RU.utf8")
print locale.localeconv()
fv = 2.5
print locale.str(fv)
<强>输出强>
{'mon_decimal_point': '', 'int_frac_digits': 127, 'p_sep_by_space': 127, 'frac_digits': 127, 'thousands_sep': '\xc2\xa0', 'n_sign_posn': 127, 'decimal_point': ',', 'int_curr_symbol': '', 'n_cs_precedes': 127, 'p_sign_posn': 127, 'mon_thousands_sep': '', 'negative_sign': '', 'currency_symbol': '', 'n_sep_by_space': 127, 'mon_grouping': [], 'p_cs_precedes': 127, 'positive_sign': '', 'grouping': [3, 3, 0]}
2,5
下面是一些演示简单的区域设置感知打印功能的代码。正如我在评论中提到的,在打印时提供明确的格式规范通常会更好。当然,当您不需要花哨的输出时,例如在非常简单的脚本中以及在开发/调试期间,基本的print a, b, c
形式很方便,但是当您将它用于任何最简单的时候,这种输出往往看起来很草率例。
简单format_string % tuple_of_values
样式格式不支持区域设置。语言环境模块提供了一些使用旧format
格式化协议的函数(format_string
&amp; %
)。但是,%
样式格式化正在现代Python中逐步淘汰,有利于内置format
函数和str.format
支持的新格式化格式。这些format
函数为数字提供了本地感知格式类型说明符:n
;下面的代码说明了它的用法。
# -*- coding: utf-8 -*-
import locale
locale.setlocale(locale.LC_NUMERIC, "ru_RU.utf8")
def lprint(*args):
lstr = locale.str
print ' '.join([lstr(u) if isinstance(u, float) else str(u) for u in args])
lprint(1.25, 987654, 42.0, 2.33, u"Росси́я".encode('UTF-8'), 3.456)
print locale.format_string('%.2f %d %.3f %.3f %s %f', (1.25, 987654, 42.0, 2.33, u"Росси́я", 3.456))
print '{0:n} {1:n} {2:n} {3:n} {4:n} {5}'.format(1.25, 987654, 42.0, 2.33, 3.456, u"Росси́я".encode('UTF-8'))
输出(在终端设置中使用UTF-8编码)
1,25 987654 42 2,33 Россия 3,456
1,25 987654 42,000 2,330 Россия 3,456000
1,25 987 654 42 2,33 3,456 Россия
请注意,在第二行中,我们可以传递Unicode字符串对象,因为locale.format_string
知道编码。在输出的最后一行987654印有千位分隔符,在俄罗斯语言环境中是一个空格。
如果使用Python 2.7(或更高版本),'{0:n} {1:n} {2:n} {3:n} {4:n} {5}'
格式字符串可以简化为'{:n} {:n} {:n} {:n} {:n} {}'
。当然,在Python 3中,print
语句不再可用:它已被print
函数替换;您可以在任何其他from __future__ import print_function
语句之前执行import
,在更高版本的Python 2中访问该函数。