如何使用左零焊盘格式化双倍?

How can I format double with left zero pads?

提问人:Jin Kwon 提问时间:11/17/2023 最后编辑:Jin Kwon 更新时间:11/18/2023 访问量:65

问:

我的值介于(包含)和(排除)之间。double.0d60.0d

如何设置左零填充的值格式?

例如

  • 0.1234567 -> 00.1234567
  • 5.12345678 -> 05.12345678
  • 31.123456789 -> 31.123456789
  • 59.0000000001.... -> 59.0000000001....
java printf

评论

0赞 K.Nicholas 11/17/2023
使用类格式化程序
0赞 Jin Kwon 11/17/2023
@K.Nicholas 谢谢你的评论。你能给我举个例子吗?说打印成?5.1234567805.12345678
0赞 K.Nicholas 11/17/2023
我会传递这个。
0赞 Mustafa Özçetin 11/17/2023
这回答了你的问题吗?stackoverflow.com/a/1740581/2638227

答:

3赞 Reilas 11/17/2023 #1

使用 DecimalFormat 类。

double[] a = { 0.1234567, 5.12345678, 31.123456789 };
DecimalFormat f = new DecimalFormat();
f.setMinimumIntegerDigits(2);
f.setMaximumFractionDigits(20);
for (double v : a) System.out.println(f.format(v));

输出

00.1234567
05.12345678
31.123456789

评论

1赞 Jin Kwon 11/17/2023
我们是否有任何定义的分数数字常数?谢谢。20
0赞 Reilas 11/18/2023
@JinKwon,我相信它是 16 位十进制数字。“......描述了十进制格式,与 32–128 位二进制格式的长度相匹配。这些给出了具有 7、16 和 34 位有效性的十进制交换格式......“,来自维基百科 – IEEE 754-2008 修订版 – Clause_3:格式
-1赞 Jin Kwon 11/17/2023 #2

我目前正在使用以下逻辑解决我的问题。

double d = ...
var f = d % 1;
var i = d - f;
var formatted = String.format("%1$02d", i) + 
                BigDecimal.valueOf(f).toString().substring(1);
0赞 Oleg Cherednik 11/18/2023 #3

您可以通过以下方式轻松完成:String.format()

double num = 5.12345678;
System.out.println(String.format(Locale.US, "%f", num));      // 5.123457
System.out.println(String.format(Locale.US, "%.4f", num));    // 5.1235
System.out.println(String.format(Locale.US, "%7.4f", num));   //  5.1235
System.out.println(String.format(Locale.US, "%07.4f", num));  // 05.1235

评论

0赞 Jin Kwon 11/18/2023
%.f如您所见,丢弃一些数字。我需要知道如何使用可选的左填充零和所有十进制数字进行打印。