提问人:ryvantage 提问时间:1/15/2014 更新时间:12/5/2017 访问量:11545
停止带有百分号的 DecimalFormat 移动小数
Stop DecimalFormat with percentage sign from moving the decimal
问:
有没有办法防止对象自动将小数点后两位向右移动?DecimalFormat
此代码:
double d = 65.87;
DecimalFormat df1 = new DecimalFormat(" #,##0.00");
DecimalFormat df2 = new DecimalFormat(" #,##0.00 %");
System.out.println(df1.format(d));
System.out.println(df2.format(d));
生产:
65.87
6,587.00 %
但我希望它产生:
65.87
65.87 %
答:
35赞
StoopidDonut
1/15/2014
#1
用单引号将 % 括起来:
DecimalFormat df2 = new DecimalFormat(" #,##0.00 '%'");
评论
0赞
ryvantage
1/15/2014
我看到它有效,但为什么这有效?单引号是做什么的?
3赞
Mike B
1/15/2014
来自 JavaDoc 的@ryvantage (docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html) - Many characters in a pattern are taken literally; they are matched during parsing and output unchanged during formatting. Special characters, on the other hand, stand for other characters, strings, or classes of characters. They must be quoted, unless noted otherwise, if they are to appear in the prefix or suffix as literals.
0赞
StoopidDonut
1/15/2014
@ryvantage MikeB 确实打败了我的解释,但这实际上是在逃避你的任意字符。对于其他模式匹配类也是如此 - 比如SimpleDateFormat
0赞
ryvantage
1/15/2014
啊,我明白了。所以 with 看起来像 .意义。SimpleDateFormat
MMM d, 'Y'
Jan 14, Y
1赞
StoopidDonut
1/15/2014
@JVMATL,MikeB 以一种更简洁的方式解决了这个问题,我想:)
7赞
Mike B
1/15/2014
#2
默认情况下,当您在格式字符串中使用 a 时,要格式化的值将首先乘以 100。您可以使用该方法将乘数更改为 1。%
DecimalFormat.setMultiplier()
double d = 65.87;
DecimalFormat df2 = new DecimalFormat(" #,##0.00 %");
df2.setMultiplier(1);
System.out.println(df2.format(d));
生产
65.87 %
0赞
Ender Localhost
12/5/2017
#3
我是这样做的:
// your double in percentage:
double percentage = 0.6587;
// how I get the number in as many decimal places as I need:
double doub = (100*10^n*percentage);
System.out.println("TEST: " + doub/10^n + "%");
其中 n 是您需要的小数位数。
我知道这不是最干净的方式,但它有效。
希望这会有所帮助。
评论