为什么money_format()PHP函数不格式化数字?

时间:2018-05-08 06:00:34

标签: php locale money-format

我想根据所需的区域设置格式化数字。所以,我正在使用PHP手册中的示例代码:

public static void main(String[] args) {
    int numOfCases = 0, numOfSteps = 0, num = 0;
    ArrayList<Integer> indexOfOdd = new ArrayList<Integer>();
    String input = "";
    in = new Scanner(System.in);
    numOfCases = in.nextInt();
    for (int i = 1; i <= numOfCases; i++) {
        input = in.next();
        for (int j = 0; j < input.length(); j++) {
            num = Integer.parseInt(input.substring(j, j + 1));
            if (num % 2 != 0) {
                indexOfOdd.add(j);
            }
            System.out.println(indexOfOdd);
        }

        numOfSteps = indexOfOdd.size();

        indexOfOdd.clear();
        System.out.println("Case #" + i + ": " + numOfSteps);
    }
}

而不是预期的结果,我只得到未格式化的值“1234.56”。如果我使用不同的语言环境,例如'it_IT'而不是'en_US',也会发生同样的情况。

为什么不格式?

2 个答案:

答案 0 :(得分:1)

因为你的环境中没有en_US本地人。使用locale -a进行检查。

您已安装它。请参阅此answer

答案 1 :(得分:0)

PHP手册告诉money_format( string $format , float $number )函数依赖于strfmon() C函数。

您可以作为$format参数传递的可能选项是操作系统的locale命令可以理解的选项。如果你传递了不同的东西,那么数字根本没有格式化,它只是转换为字符串。这就是发生在我身上的事。

为了列出可接受的值,您可以在提示符下使用此命令:

locale -a 

根据您的安装,它可能只列出几个区域设置。要使用更多,您可能需要安装其他语言环境。在Debian中你可以这样做:

apt-get install locales
apt-get install locales-all

安装所有语言环境后,locale -a命令会列出数百个语言环境。现在number_format()函数按预期工作。