如何在Java中获得法语格式数的双倍

问题描述 投票:2回答:1

我试图获得一个以法国风格格式化的数字的双值。所以Text 1 003,25应存储为值(1003.25)。

public class NumberFormatTest { 
    public static void main(String[] args) throws ParseException {
        String db = "1003.25";
        String manualFRA = "1 003,25";
        double numberDB = Double.parseDouble(db);
        String ger = NumberFormat.getInstance(Locale.GERMAN).format(numberDB);
        String fra = NumberFormat.getInstance(Locale.FRENCH).format(numberDB);
        String eng = NumberFormat.getInstance(Locale.ENGLISH).format(numberDB);

        double gerD = NumberFormat.getNumberInstance(Locale.GERMAN).parse(ger).doubleValue();
        double fraD = NumberFormat.getNumberInstance(Locale.FRENCH).parse(fra).doubleValue();
        double mfraD = NumberFormat.getNumberInstance(Locale.FRENCH).parse(manualFRA).doubleValue();
        double engD = NumberFormat.getNumberInstance(Locale.ENGLISH).parse(eng).doubleValue();

        System.out.println("From database: " + db);

        System.out.println("\tGerman: " + ger);
        System.out.println("\tFrench: " + fra);
        System.out.println("\tEnglish: " + eng);

        System.out.println("\nTo Database: ");  
        System.out.println("\tfrom German: "+ gerD);
        System.out.println("\tfrom French: "+ fraD);
        System.out.println("\tfrom manual French: "+ mfraD);
        System.out.println("\tfrom Englisch: "+ engD);
    }
}

From database: 1003.25
	German: 1.003,25
	French: 1 003,25
	English: 1,003.25

To Database: 
	from German: 1003.25
	from French: 1003.25
	from manual French: 1.0
	from Englisch: 1003.25

有没有人有想法,为什么手动法语值是1.0而不是1003.25?我该如何解决?在实际程序中,值来自TextField的String。

在此先感谢您的帮助!

java double number-formatting french
1个回答
3
投票

法语格式文本中的空格是NO-BREAK SPACE,而不是常规空间。

如果您将字符串文字更改为"1\u00a0003,25",它将起作用。

如果该文本来自外部来源,例如用户,那么你可以用不间断空格替换空格,例如

parse(manualFRA.replace(' ', '\u00a0'))
© www.soinside.com 2019 - 2024. All rights reserved.