十进制格式奇怪的行为



我有一些麻烦,试图找出是什么发生在我与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);

相关内容

  • 没有找到相关文章

最新更新