我想根据以下规则格式化BigDecimal值:
25 => 25
25,1 => 25,10
25,10 => 25,10
25,12 = > 25,12
我搜索了论坛,但未找到匹配的问题(here,here和here),我查看了BigDecimal和{{3}的javadoc不知道如何做到这一点。
编辑: 今天我做了:
NumberFormat currencyFormat02 = NumberFormat.getCurrencyInstance(locale);
currencyFormat02.setMinimumFractionDigits(0);
currencyFormat02.setMaximumFractionDigits(2);
currencyFormat02.setGroupingUsed(false);
BigDecimal bd = new BigDecimal("25 or 25,1 or 25,10 or 25,12");
String x =currencyFormat02.format(bd);
x应按上述方式打印,但不能打印。
答案 0 :(得分:1)
然后,您需要区分代表“整数”的BigDecimal值;而那些没有。
类似的东西:
BigDecimal someNumber = ...
if (someNumber.toBigIntegerExact()) {
// go for the 25 kind of formatting
} else {
// go for the 25.xx kind of formatting
“25.xx”格式很好地描述了here(或莱昂纳多的另一个答案)
答案 1 :(得分:1)
可能效率不高,但你可以尝试这样的事情:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
class Main {
public static void main(String[] args) {
BigDecimal ex1 = new BigDecimal("25");
BigDecimal ex2 = new BigDecimal("25.1");
BigDecimal ex3 = new BigDecimal("25.10");
BigDecimal ex4 = new BigDecimal("25.12");
printCustomBigDecimalFormat(ex1);
printCustomBigDecimalFormat(ex2);
printCustomBigDecimalFormat(ex3);
printCustomBigDecimalFormat(ex4);
}
public static void printCustomBigDecimalFormat(BigDecimal bd) {
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
symbols.setDecimalSeparator(',');
DecimalFormat df = new DecimalFormat("##.00", symbols);
if(containsDecimalPoint(bd)) {
System.out.println(df.format(bd));
} else {
System.out.println(bd);
}
}
private static boolean containsDecimalPoint(BigDecimal bd) {
return bd.toString().contains(".");
}
}
<强>输出:强>
25
25,10
25,10
25,12
试试here!
答案 2 :(得分:0)
要使用NumberFormat格式化BigDecimal,您需要先设置Locale,尝试这样的事情:
String strToFormat = "25.10";
Locale loc = new Locale("en","US");
DecimalFormat numFormat = (DecimalFormat)NumberFormat.getInstance(loc);
numFormat.setParseBigDecimal(true);
BigDecimal yourValue = (BigDecimal)numFormat.parse(strToFormat, new ParsePosition(0));
System.out.println("Value : " + yourValue);
结果:
Value : 25.10