DecimalFormat - 没有小数分隔符

Posted

技术标签:

【中文标题】DecimalFormat - 没有小数分隔符【英文标题】:DecimalFormat - no decimal separator 【发布时间】:2012-05-13 06:51:24 【问题描述】:

我使用DecimalFormat 类将数字格式化为字符串,反之亦然。

在我的数据库中,Java 双精度以特定方式表示:例如 128.88 存储为“00012888”。为此,我使用“00000.00”模式并删除“。”格式化后的小数分隔符,这不是一个聪明的解决方案。

有没有办法告诉 DecimalFormat 不要使用任何小数分隔符?我可以让它理解代表十进制数的字符串中的整数部分和小数部分在哪里?

我不希望在转换之前不必进行乘法、除法、截断或舍入。 这有什么神奇的模式吗?还是 DecimalFormat 类不够灵活?

我不能使用 String.format() 方法,因为我在 Java 1.4 平台上工作。

感谢您的帮助。

【问题讨论】:

不能把数据库列改成DECIMALS(9, 2)吗?还是会无点存放,比较正常。此外,BigDecimal 非常笨拙,但比 double 更好。您可以使用正确的列定义创建视图,只需 getDouble 或 getBigDecimal。 不,很遗憾。但是 BigDecimal 似乎是一个很好的解决方案。谢谢! 【参考方案1】:

DecimalFormat 还不够强大。

你可以使用这样的方法:

double getD(String fixedWidthNumber) 
    return Double.valueOf(fixedWidthNumber.substring(0,6)+"."+fixedWidthNumber.substring(6,8));

【讨论】:

【参考方案2】:
BigDecimal value = new BigDecimal("234.33");
DecimalFormat decFrm = new DecimalFormat("000.00");
char decSep = decFrm.getDecimalFormatSymbols().getDecimalSeparator();
String resultStr = decFrm.format(value).replace(Character.toString(decSep), "");

结果:3423433

【讨论】:

以上是关于DecimalFormat - 没有小数分隔符的主要内容,如果未能解决你的问题,请参考以下文章

DecimalFormat(数字格式)

DecimalFormat详解

货币小数分隔符不起作用

java中 DecimalFormat格式的定义

java中 DecimalFormat格式的定义

DecimalFormat用法