0

我有一个简单的程序,可以计算双精度值并打印出来。每当该双精度的值为负时,输出字符串的第一个字符是 \u200e,ASCII 值 8206。我在网上找不到任何关于此的信息。

        System.out.println((int)DecimalFormat.getInstance().format(-1).charAt(0));
        System.out.println((int)DecimalFormat.getInstance().format(-1.0).charAt(0));
        System.out.println((int)NumberFormat.getInstance().format(1).charAt(0));
        System.out.println((int)NumberFormat.getInstance().format(0).charAt(0));

它打印如下:

8206
8206
49
48

所以我知道每个负值都有这个奇怪的前缀,但是为什么呢?如果我使用String.format()它不会发生。在任何地方都找不到关于此的文档。

有人遇到过这种情况或知道如何解释吗?

4

1 回答 1

0

您将数字格式化为字符串,然后取第一个字符charAt(0),将其转换为int并实际打印 ASCII 码。

所以难怪代码会产生这样的结果:

45  // ASCII code of - in your default locale it's another character for negative values
45
49  // ASCII code of 1
48  // ASCII code of 0

8206从左到右标记的 Unicode 字符。

当应用 RTL 语言环境时,很可能将此字符添加到NumberFormat/DecimalFormat以从左到右正确显示值,如本答案中所述

于 2020-07-22T21:56:25.887 回答