gpt4 book ai didi

linux - float 在 perl 的德语语言环境中不是逗号分隔的

转载 作者:太空狗 更新时间:2023-10-29 11:28:49 25 4
gpt4 key购买 nike

我已经在德语语言环境中安装了一台 Linux 机器。当我在 perl 中打印 float/double 时,我希望它以逗号分隔而不是点分隔打印。但它没有发生。有什么想法吗?

    [root@IDCDVAM886 ~]# uname -a
Linux IDCDVAM886 3.10.0-327.el7.x86_64 #1 SMP Thu Oct 29 17:29:29 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@IDCDVAM886 ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
[root@IDCDVAM886 ~]# locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=de_DE.UTF-8
[root@IDCDVAM886 ~]# echo $LC_ALL
de_DE.UTF-8
[root@IDCDVAM886 ~]# echo $LC_NUMERIC
de_DE.UTF-8

[root@IDCDVAM886 ~]# cat my.pl
#!/usr/bin/perl

use locale;

print "LC_NUMERIC = $ENV{LC_NUMERIC}\n";
print 5/2 ;
print "\n";
my $val = 2,5;
print "$val\n";

[root@IDCDVAM886 ~]# ./my.pl
LC_NUMERIC = de_DE.UTF-8
2.5
2

最佳答案

您的问题涉及两个不同的主题。以下假设您取消设置 LC_ALL 并设置 LC_NUMERIC,因为 LC_ALL 覆盖 LC_NUMERIC

 $ unset LC_ALL
$ export LC_NUMERIC=de_DE.UTF-8

编程语言本地化

$ perl -e 'printf "%f\n", 2,5'
2.000000

您的语言环境定义了数字的打印方式。语言环境不会改变编程语言的语法。 Perl 代码对区域设置的更改无动于衷。如果不是,您必须为每种语言修改每个程序。这将是真正的痛苦,例如在 Excel 中。

程序输入和输出的本地化

$ perl -e 'printf "%f\n", "2,5"'
2.000000

这可以被认为是一个错误。 Bash 做对了:

$ printf '%f\n' 2,5
2,500000

为了正确使用 Perl 5.18.2,我必须这样做:

$ export LC_ALL=de_DE.UTF-8
$ perl -e 'use locale; use POSIX qw(locale_h); setlocale(LC_NUMERIC, "de_DE"); printf "%f\n", "2,5"'
2,500000

即使我使用 setlocale 而不设置 LC_ALL,我在 Perl 5.18.2 中也会得到错误的结果。这太疯狂了。

但是 Perl 在本地化方面有着笨拙的悠久传统。源文件中的 Latin1 是一个类似的崩溃。

关于linux - float 在 perl 的德语语言环境中不是逗号分隔的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40738403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com