2011-12-21 58 views
11

输入看起来像8.7000000,我想格式化它看起来像8.70 EUR。 我考虑过使用DecimalFormat类:如何使用DecimalFormat格式化货币?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 

结果是8,7 EUR。如何告诉格式化程序在,之后有两位数字?

+3

一般情况下,你不应该使用二进制浮点类型来存储货币值反正。使用BigDecimal或只是缩放整数(例如,具有整数美分)。 – 2011-12-21 13:49:47

回答

23

也想在此强调乔恩斯基特的有关使用整型来存储所有货币点 - 不希望被处理漂浮在金钱点错误。

使用.00,而不是## - 0表示一个数字,#表示一个数字(但隐藏它,如果它等于零)

Double number = Double.valueOf(text); 

DecimalFormat dec = new DecimalFormat("#.00 EUR"); 
String credits = dec.format(number); 

TextView tt = (TextView) findViewById(R.id.creditsView); 
tt.setText(credits); 

使用setMinimumFractionDigits?

Double number = Double.valueOf(text); 

    DecimalFormat dec = new DecimalFormat("#.## EUR"); 
    dec.setMinimumFractionDigits(2); 
    String credits = dec.format(number); 

    TextView tt = (TextView) findViewById(R.id.creditsView); 
    tt.setText(credits); 
+0

完美,谢谢! – 2011-12-21 13:44:01

+0

如果我有0.0600作为输入并希望6,0 ct作为输出,格式将如何? – 2011-12-21 13:47:18

+0

你必须在代码中这么做 - 我十分担心 - Decimal格式不能应付改变单位。我想有一个条件,如果'(VAL < 1 && val > 0){//乘以100,并使用CT格式化}其他{//使用欧元格式化} – 2011-12-21 13:48:42

4

我发现这个链接一个很好的解决方案如下

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

总之

表示类似92323345465.30为92,323,345,465.30只使用一种货币###,###,###,# ##。00

也就是说,只要你使用“0”,那么“0”要么被另一个数字来代替,或者如果没有数字来取代它,然后它就会出现!但是你使用'#',那么如果没有数字来代替'#',那么这个空间就是空的。

记住,你甚至可以添加你自己的符号,比如$,等在格式化前,甚至格式化字符串后

2

我认为一个好的办法是这样的形式给出:

使用#,###.00的导致了价值0.50会显示如下:

$ 50

然而,如果你使用#,##0.00为同一值的结果将是:

$ 0.50