我有一些麻烦,试图找出是什么发生在我与DecimalFormat。
我有以下代码:
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(decimalSeparator);
decimalFormatSymbols.setGroupingSeparator(thousandSeparator);
DecimalFormat decimalFormat = new DecimalFormat("###0.######", decimalFormatSymbols);
decimalFormat.setDecimalSeparatorAlwaysShown(numberDecimal > 0);
decimalFormat.setMinimumFractionDigits(numberDecimal);
decimalFormat.format(Double.valueOf(value));
其中decimalSeparator为'。', thousandSeparator为',',value为字符串,等于100.000000
运行上面的代码,结果等于:100.000000
然而如果我运行下面的代码:
DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setDecimalSeparatorAlwaysShown(numberDecimal > 0);
decimalFormat.setMinimumFractionDigits(numberDecimal);
decimalFormat.applyPattern("###0.######");
decimalFormat.setDecimalFormatSymbols(decimalFormatSymbols);
结果是:100
这是我想要的结果,因为我需要去掉末尾的0
使用构造函数和setter方法有什么区别?
我处理的十进制格式在正确的为什么?或者,如果在另一台机器上执行此代码,例如另一个区域设置,我会遇到麻烦吗?
注意:要求有一个带'的数字。'作为小数分隔符,但末尾没有零,也没有thousandSeparator字符。例如:3000000→300000099.939.000→99.939
DecimalFormat由一个模式和一组符号组成。该模式可以通过
applyPattern()
直接设置,或者通过API间接设置方法。符号存储在DecimalFormatSymbols对象中。当使用NumberFormat工厂方法,模式和符号是从localizedresourcebundles中读取
如果你看一下DecimalFormat.java的源代码,你会看到applyPattern()
调用this.setMaximumFractionDigits()
你做的工作远远超过你需要做的。
只是传递一个Locale给NumberFormat。getInstance方法。它将根据区域设置处理符号。默认行为已经是,如果值被格式化为没有十进制数字,则隐藏小数点。
NumberFormat numberFormat = NumberFormat.getInstance(Locale.ENGLISH);
numberFormat.setGroupingUsed(false);
String valueStr = numberFormat.format(value);