Javascript Java转换用户';s通过将零添加到以下格式XX.xxxxxx中来输入

Javascript Java转换用户';s通过将零添加到以下格式XX.xxxxxx中来输入,javascript,java,Javascript,Java,我使用JavaScript进行了客户端验证,如果用户在小数点前输入一位数字或小数点后输入少于6位数字,它将通过添加零来转换用户的输入值。例如: 2.45转换为->02.450000 数据输入0(包括0.0、0.00或0.000等)不是有效值 在JavaScript中使用以下逻辑: const formatInput = (input) => { const [base, dec] = input.split('.'); let value = (!+base ? base :

我使用JavaScript进行了客户端验证,如果用户在小数点前输入一位数字或小数点后输入少于6位数字,它将通过添加零来转换用户的输入值。例如:

  • 2.45转换为->02.450000
  • 数据输入0(包括0.0、0.00或0.000等)不是有效值
在JavaScript中使用以下逻辑:

const formatInput = (input) => {
  const [base, dec] = input.split('.');
  let value = (!+base ? base : base.padStart(2, '0')) + '.' + (dec || '').padEnd(6, '0');
  return value;
};
console.log(formatInput('2.45'))

现在我正试图用JAVA实现同样的结果。如何在后端用JAVA实现相同的逻辑?

我不知道是否正确理解了您的问题,我也不明白为什么输入仅限于这些特定数量的数字。我试着快速地组合出一个相当丑陋的解决方案,但它并没有得到优化

我试图将输入限制在我理解您描述的方式,并按照您描述的方式集中精力构建输入。因此:

public static void main(String[] args) {
    System.out.println(formatInput("0.060"));
    System.out.println(formatInput("10.4960"));
    System.out.println(formatInput("1.99"));
    System.out.println(formatInput("9"));
    System.out.println(formatInput("29.666666"));
    System.out.println(formatInput("0.0"));
}

private static String formatInput(String input) {
    String result = "";
    String[] parts = input.split("\\.");

    StringBuilder sb = new StringBuilder();

    if ((input == null) || (input.isEmpty()) || (!input.matches(".*[1-9].*")) || (parts.length < 1) || (parts.length > 2)
            || (parts[0].length() > 2) || (parts.length == 2 && parts[1].length() > 6)) { // filtering out the invalid cases
        System.out.println("Invalid input.");
        return result;
    }
    if (parts[0].length() == 1) {
        sb.append('0');
    }
    sb.append(parts[0]).append('.');
    if (parts.length == 2) { // input is of value xx.xx
        sb.append(parts[1]);
        for (int i = 0; i < 6 - parts[1].length(); i++) { // pad remaining zeroes
            sb.append('0');
        }
        result = sb.toString();
    } else if (parts.length == 1) { // input is of value x or xx
        sb.append("000000");
        result = sb.toString();
    }
    return result;
}
可以使用将输入值转换为所需格式,然后将其存储为字符串以保留格式。下面是示例代码段

   public void formatInput() {
    double input = 2.45;
    java.text.DecimalFormat df = new java.text.DecimalFormat("00.000000");
    String formattedInput = String.valueOf(df.format(input));
    System.out.println("Formatted text: " + formattedInput);
}
输出是

Formatted text: 02.450000

编辑1:正如@saka1029所提到的,您可以一次性使用String.format。

您可以使用
String.format(“%09.6f”,input)
获得相同的结果。Yes String.format很简单,并且基于用例,您可以使用String.format而不是DecimalFormat。至少我能想出两个使用DecimalFormat的理由。1.如果formatter需要在多个字段上执行多次,则最好创建DecimalFormat实例并重用.String.format每次创建formatter实例2。十进制格式
Formatted text: 02.450000