语言环境.setlocale(LC_NUMERIC):如何使其在Windows上运行

2024-05-15 11:37:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我不到10分。这是我的小脚本:

import locale
locale.setlocale(locale.LC_NUMERIC,"rus")

print locale.localeconv()

fv = 2.5
print str(fv)

打印出来:

^{pr2}$

我们看到小数点是',';为什么2,5被打印成2.5??在

谢谢


Tags: import脚本localelcprintstrnumeric小数点
1条回答
网友
1楼 · 发布于 2024-05-15 11:37:17

您需要调用^{}方法,而不是普通的str构造函数。在

import locale
locale.setlocale(locale.LC_NUMERIC,"ru_RU.utf8")

print locale.localeconv()

fv = 2.5
print locale.str(fv)

输出

^{pr2}$

下面的代码演示了一个简单的区域设置感知打印函数。正如我在评论中提到的,在打印时提供一个明确的格式规范通常更好。当然,基本的print a, b, c形式在您不需要花哨的输出时非常方便,例如在非常简单的脚本中以及在开发/调试期间,但是当您将其用于除最简单的情况之外的任何情况时,这样的输出往往显得草率。在

简单format_string % tuple_of_values样式的格式设置不区分区域设置。locale模块提供了两个函数(format&;format_string),它们使用旧的%格式化协议。然而,%样式的格式正在逐渐被现代Python淘汰,取而代之的是内置的^{}函数和^{}所支持的新格式。这些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的最后一行中,打印了一个千位分隔符,在俄语地区是一个空格。在

如果使用Python2.7(或更高版本),则'{0:n} {1:n} {2:n} {3:n} {4:n} {5}'格式字符串可以简化为'{:n} {:n} {:n} {:n} {:n} {}'。当然,在Python3中,print语句不再可用:它已被print函数所取代;在以后的Python2版本中,可以通过在任何其他import语句之前执行from __future__ import print_function来访问该函数。在

相关问题 更多 >