首页 > 解决方案 > Java 通过将零添加到以下格式 XX.xxxxxx 来转换用户的输入

问题描述

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

通过在 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 中实现相同的逻辑?

标签: javascriptjava

解决方案


我不知道我是否正确理解了您的问题,我也不明白为什么输入仅限于这些特定数量的数字,但无论如何。我试图快速拼凑出一个非常丑陋的解决方案,它绝不是优化的。

我试图将输入限制为我理解您的描述的方式,并专注于按照您的描述构建输入。所以它是:

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;
}

输出:

00.060000
10.496000
01.990000
09.000000
29.666666
Invalid input.

推荐阅读