例如说我有 Double 值1.23456789123456
。我希望能够将此数字乘以 10 的各种幂并将输出显示为
123.456789123456
12345.6789123456
0.0123456789123456
0.000123456789123456
etc
有没有办法在 Java 中做到这一点,而不必使用 if...then 语句来处理 10 的不同幂所需的不断变化的小数精度?
例如说我有 Double 值1.23456789123456
。我希望能够将此数字乘以 10 的各种幂并将输出显示为
123.456789123456
12345.6789123456
0.0123456789123456
0.000123456789123456
etc
有没有办法在 Java 中做到这一点,而不必使用 if...then 语句来处理 10 的不同幂所需的不断变化的小数精度?
如果您不需要将数字作为实际浮点值,请尝试将数字表示为String
不带小数点的 a(例如"123456789123456"
)。然后使用该String.substring()
方法,你可以在任何你想要的地方打印小数点,包括前导零等。我不知道你可以完全避免使用任何if
语句,但逻辑应该相当简单。
例如,这将打印三位有效数字后的小数:
String n = "123456789123456";
System.out.print(n.substring(0, 3));
System.out.print('.');
System.out.print(n.substring(3));
这可以改进,但它很接近:
public class Test {
public static void main(final String[] args) {
System.out.println(format(123.456789123456d));
System.out.println(format(12345.6789123456d));
System.out.println(format(0.0123456789123456d));
System.out.println(format(0.000123456789123456d));
}
public static String format(final double d) {
final int before = 16 - Integer.toString((int) d).length();
final String format = "%" + (16 + before) + "." + before + "f";
return String.format(format, d);
}
输出:
123.4567891234560
12345.67891234560
0.012345678912346
0.000123456789123