BigDecimal在Android 4.0.3中提供了具有本地化的NumberFormatException

时间:2014-03-26 10:19:15

标签: android localization bigdecimal decimalformat

我正在使用Persian(locale-“fa”)和Pashto(locale-“ps”)语言在我的应用程序中进行本地化。当我尝试使用Decimal Foramt在BigDecimal中转换double值时,它会在4.0中给出NumberFormatException .3用波斯语。

以下是获取两位小数的代码:

public static String roundTwoDecimals(double d) {

    System.out.println("===================Amount in double "+d);
    DecimalFormat twoDForm = new DecimalFormat("#############.##");
    String format=twoDForm.format(d);
    System.out.println("===================Amount after formatting "+format);
    return new BigDecimal(twoDForm.format(d)).toPlainString();
}

logcat的:

03-26 15:19:29.714: I/System.out(1475): ===================Amount in double 166308.37
03-26 15:19:29.723: I/System.out(1475): ===================Amount after formatting ۱۶۶۳۰۸٫۳۷

实际金额为166308.37,当我将语言更改为波斯语(“fa”)并对其进行格式化时,它会在4.0.3中给出۱۶۶۳۰۸٫۳۷之类的金额。 因此,此字符串无法转换为BigDecimal并提供NumberFormatException

奇怪的是,除了4.0.3之外,它的工作原理非常好。

1 个答案:

答案 0 :(得分:5)

试试这段代码..

public static String roundTwoDecimals(double d) {

    NumberFormat nf=NumberFormat.getCurrencyInstance(Locale.ENGLISH);
    DecimalFormat df = (DecimalFormat)nf;
    df.applyPattern("#############.##");
    String output = df.format(d);

    return new BigDecimal(output).toPlainString();
}