DecimalFormat给出的货币符号看起来无效

时间:2016-08-02 03:46:32

标签: java

我在java 8中遇到了以下问题

import java.util.*;
import java.text.*;
import java.lang.*;

class NumberTest5 {
    public static void main(String[] args) {
        Locale loc = new Locale("sr","ME");
        DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(loc);
        System.out.println("\n"+"currencySymbol:"+df.getPositivePrefix()+"\tlength:"+df.getPositivePrefix().length());
        //here the above result is currencySymbol:  €+(non breakable space char)
        //length:2     
    }
}

真正的问题是为什么货币符号附加了额外的字符..?

为什么上述程序以这种方式行事......?。

它的问题是什么?如何纠正它??

谢谢

2 个答案:

答案 0 :(得分:6)

它无效。

以下

Locale loc = new Locale("sr","ME");

代表黑山塞尔维亚人的Locale。我找不到Java的等价物,但是here是glibc的这个语言环境的描述。在货币下,您会注意到Space separation between symbol and value设置为1,表示

  

空格将符号与值

分开

因此,如果您格式化了值,例如

System.out.println(df.format(123.45));

你得到

€ 123,45

货币符号与值之间的空格。

正面上缀代表的内容。

答案 1 :(得分:0)

getPositivePrefix()方法将返回带有货币符号和空格字符的字符串 - 它们执行此操作以使货币符号和值分开。

你不想要太空人物吗? 你可以做两件事:

解决方案1 ​​

String symbol = df.getDecimalFormatSymbols().getCurrencySymbol();
    System.out.println("\n"+"currencySymbol:"+ symbol + "500\tlength:"+symbol.length());

输出:

currencySymbol:€500 length:1

解决方案2

添加退格转义序列:' \ b',这将删除打印期间的空格。但是在调用length()方法

时,字符串长度大小将保留
String symbol = df.getPositivePrefix();
    System.out.println("\n"+"currencySymbol:" + symbol +"\b500\tlength:"+symbol.length());

输出:

currencySymbol:€500 length:2