繁体   English   中英

DecimalFormat 奇怪的行为

[英]DecimalFormat strange behaviour

我在试图弄清楚 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 是 '.',千位分隔符是 ',' 并且 value 是一个字符串,并且等于 100.000000

运行上面的代码,结果等于:100.000000

而如果我运行以下代码:

DecimalFormat decimalFormat = new DecimalFormat();
decimalFormat.setDecimalSeparatorAlwaysShown(numberDecimal > 0);
decimalFormat.setMinimumFractionDigits(numberDecimal);
decimalFormat.applyPattern("###0.######");
decimalFormat.setDecimalFormatSymbols(decimalFormatSymbols);

结果是:100

这是我想要的结果,因为我需要在最后摆脱零。

使用构造函数或 setter 方法有什么区别?

我是否在正确处理 DecimalFormat 为什么? 或者,如果在另一台机器上执行此代码,例如另一个语言环境,我会遇到麻烦吗?

注意:要求有一个带有“.”的数字。 作为小数分隔符,但末尾没有零,并且没有千位分隔符。 例如:3,000,000.000 -> 3000000 99.939.000 -> 99.939

DecimalFormat 包含一个模式和一组符号。 可以使用applyPattern()直接设置模式,也可以使用 API 方法间接设置。 符号存储在 DecimalFormatSymbols 对象中。 当使用 NumberFormat 工厂方法时,模式和符号是从本地化的 ResourceBundle 中读取的。

如果你看一下 DecimalFormat.java 的源代码,你会看到applyPattern()调用this.setMaximumFractionDigits()

你做的工作比你需要做的要多得多。

只需将 Locale 传递给 NumberFormat.getInstance 方法。 它将处理基于该语言环境的符号。 如果值被格式化为没有小数位,则默认行为已经隐藏小数点。

NumberFormat numberFormat = NumberFormat.getInstance(Locale.ENGLISH);
numberFormat.setGroupingUsed(false);
String valueStr = numberFormat.format(value);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM