2015-09-30 31 views
0

进出口使用的NumberFormat bracketted文字负数

double value = -1.0; 
    NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(Locale.US); 
    String formattedText = defaultFormat.format(value); 

在活动显示负数但是,当我在Samsung Galaxy S5 (Android 4.4.2)运行此我得到($1.0)凡为Nexus 5 (Android 5.1.1)赋予它作为-$1.0

这里有什么问题?

回答

0

由于@Bonati

public static String formatAmount(double value) { 
     NumberFormat numberFormat = new DecimalFormat("'$'0.00"); 
     return numberFormat.format(value); 
    } 

这对我工作得很好。

+0

如果答案对您有帮助,请点击下方的绿色V标记为“已回答”,这将结束该问题。如果您需要更多帮助或不同的帮助,请发布一个新问题或编辑您的问题以询问您的需求。祝你好运。 – Bonatti

1

From the documentation:

警惕的默认语言环境

注意这里是自动使用默认的语言环境许多方便的方法,但是使用它们可能会导致微妙的错误。

默认语言环境适用于涉及向用户呈现数据的任务。在这种情况下,您想要使用用户的日期/时间格式,数字格式,转换为小写字母的规则等等。在这种情况下,使用便利方法是安全的。

缺省语言环境不适用于机器可读输出。最好的选择通常是Locale.US - 这个区域保证可以在所有设备上使用,并且它没有令人意外的特殊情况并经常使用(特别是对于计算机 - 计算机通信)意味着它往往是最有效的选择。

一个常见的错误是在生成意味着机器可读的输出时隐式使用缺省语言环境。这往往适用于开发人员的测试设备(特别是因为许多开发人员使用en_US),但在用户处于更复杂的区域设置的设备上运行时会失败。

例如,如果格式化整数,某些语言环境将使用非ASCII十进制数字。作为另一个例子,如果你正在格式化浮点数,一些locale将使用','作为小数点,'。'用于数字分组。这对于人类可读的输出是正确的,但是如果呈现给另一台计算机可能会导致问题(例如,parseDouble(String)无法解析这样的数字)。你也应该警惕toLowerCase()和toUpperCase()重载,它们不采用Locale:例如,在土耳其,字符'i'和'I'不会被转换为'I'和'i ”。这是土耳其文本的正确行为(如用户输入),但不适用于HTTP标头。

+0

是的,你是对的。 现在我使用自己的格式化程序 NumberFormat defaultFormat = new DecimalFormat(“'''0.00”);返回defaultFormat.format(value); –