NumberFormat没有给出正确的数字

时间:2016-12-05 18:57:01

标签: java

我有这段代码:

import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
import java.util.Scanner;


class EntryPoint {
    static Locale czech = null;

    static Locale getCzechLocale(){
        if (czech == null){
           czech = new Locale("cs","CZ");
        }
        return czech;
    }

    public static void main(String[] args) {
        Scanner sn = new Scanner(System.in);
        NumberFormat nf = NumberFormat.getInstance(getCzechLocale());
        System.out.println(nf.format(12000.5));
        NumberFormat nf2 = NumberFormat.getCurrencyInstance(getCzechLocale());
        try {
            String input = sn.nextLine();
            System.out.println(input);
            Number n = nf.parse(input);
            System.out.println(n.floatValue());
        }catch(ParseException javaTextParseException){
           System.err.println("Unable to parse input String");
        }
   }

}

我想归档这个东西:如果我输入数字“12 000,5”(如程序显示)程序解析和此字符串并将显示数字“12000.5”。 我错了什么? 现在,如果我输入“12 000,5”没有“签名程序显示浮点数”12.0“不是”12000.5“

解决 NumberFormat.Parse(String)将在第一个空格char结束,所以如果我修改trim()和Replace(“”,“”),那么结果就可以了。

3 个答案:

答案 0 :(得分:1)

NumberFormat不会在第一个空格中停止。只是您正在使用的NumberFormat使用的分组分隔符是一个不间断的空间,而不是常规空间。

如果您复制并粘贴程序的输出以将其作为输入传递,它将很乐意将其解析回12000.5,因为输出使用了不间断的空格。

如果您希望它使用常规空格字符,请使用

DecimalFormat nf = (DecimalFormat) NumberFormat.getInstance(new Locale("cs", "CZ"));
DecimalFormatSymbols decimalFormatSymbols = nf.getDecimalFormatSymbols();
decimalFormatSymbols.setGroupingSeparator(' ');
nf.setDecimalFormatSymbols(decimalFormatSymbols);

答案 1 :(得分:-2)

试试这段代码,它对我有用:

        Locale czech = new Locale("cs", "CZ");
        Scanner sn = new Scanner(System.in);
        NumberFormat nf = NumberFormat.getInstance(czech);
        String input = sn.nextLine();
        System.out.println(nf.format(Double.parseDouble(input)));
        sn.close();

答案 2 :(得分:-2)

如果你使用像## ###,#这样的固定格式,请考虑使用像DecimalFormat这样的固定格式解析器:

NumberFormat nf = new DecimalFormat("### ###.##");
Number n=nf.parse("123 456,78");