Java DecimalFormat省略小数点前的前导零

时间:2015-07-22 10:48:24

标签: java format decimal

让我们看一下代码片段

double f = .123;        
System.out.println(f);
System.out.println(new DecimalFormat(".###").format(f));

因此我们可以使用.###省略前导零0,但我们必须在小数点/句点之后定义尾随数字。

我想定义可以提供无限制after-decimal-point位数的DecimalFormat格式化程序。

我该怎么做?

P.S。

我确实尝试了".",但我们没有打印十进制数字。我们可以使用".#*"

之类的格式语法

3 个答案:

答案 0 :(得分:2)

Double是一个有限逼近(64位,包括符号和指数),因此无法完成无限和精确。

使用BigDecimal。 String构造函数将通过字符串获取其精度。

BigDecimal n = new BigDecimal("0.1234567890123456789012345678901234567890");
n = n.multiply(n); // n now has double precision.
String s = n.toPlainString().replaceFirst("^0\\.", "."); // Without exponent.

如果您想要无限制的表示,只需使用toPlainString即可。 关于在使用正则表达式替换之后,可以使用一段时间之前删除零点。

答案 1 :(得分:1)

您可以将数字转换为字符串并跳过第一个字符:

double f = .123;        
System.out.println(Double.toString(f).substring(1));

经过一些研究,我不相信使用DecimalFormat可以实现这一目标。但是,您建议的".#*"可能是一个有用的补充。

答案 2 :(得分:1)

由于浮动没有无限制的after-dicimal-points,只需使用尽可能多的#

您还可以将数字转换为字符串并选择要显示的子字符串。

float f = 0.123;
String fs = Float.toString(f);
System.out.println(fs.substring(fs.indexOf('.'), fs.lenght());

如果您事先不知道,如果您的号码只有一个前导零,这也有效。

不幸的是,我不能告诉你这是否也可以使用DecimalFormatter。