转换双精度值以包含小数点分隔符,并且在groovy中仅用逗号后两位

时间:2018-09-28 10:05:35

标签: java groovy

我想转换一个数字,如下所示:

2937998.7397271004

看起来像这样:

2.937.998,73

我为达到这个目的的尝试如下,但结果仍然相同:

DecimalFormat decimalFormat = new DecimalFormat("###.###.###.###,00");
def val = decimalFormat.format(cell.getNumericCellValue().doubleValue())
return val

3 个答案:

答案 0 :(得分:4)

一种方法是使用支持您的格式设置模式的语言环境。例如Locale.GERMAN符合您的期望

DecimalFormat df = new DecimalFormat("###,###.00",
        DecimalFormatSymbols.getInstance(Locale.GERMAN));
df.format(2937998.7397271004); // 2.937.998,74

答案 1 :(得分:1)

对于此问题,您绝对应该使用区域设置。在您的情况下,格式为德语:

import java.text.NumberFormat

NumberFormat numberFormat = NumberFormat.getInstance(Locale.GERMAN);
println numberFormat.format(2937998.7397271004)

答案 2 :(得分:-1)

尽管我对groovy并不熟悉,但据我所知它仍在使用java库。

如Java类文档Documentation所示,您不能在标准DecimalFormat上使用倍数。。

因此,以下代码行需要更改为:

DecimalFormat decimalFormat = new DecimalFormat("###,###,###,###.00");

哪个将使用提供的2937998.7397271004值响应2.937.998,74。

如果要以2.937.998,74的价格进行操作,则至少可以在Java中执行以下操作。

DecimalFormat decimalFormat = new DecimalFormat("###,###,###,###.00");
DecimalFormatSymbols custom = new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
custom.setGroupingSeparator('.');
decimalFormat.setDecimalFormatSymbols(custom);

String val = decimalFormat.format(cell.getNumericCellValue().doubleValue());

或将语言环境用作其他请求者提出的建议。