将双精度数格式化作为函数参数

huangapple go评论73阅读模式
英文:

Formatting double as a function parameter

问题

我有一个接受双精度浮点数作为参数的函数。然而,当我调用该函数时,如果我输入“8”,它会被处理为“8.0”。

我知道我可以使用 String.format() 和其他方法来格式化它,然而输入数字的格式对结果很重要(8和8.0具有不同的结果,而在函数体内部,我不知道用户打算输入哪个)。

我知道我可以添加一个格式化参数和双精度浮点数,function(double d, DecimalFormat f),但那会使使用变得更加繁琐,而且它本来就被设计为一个实用函数。有什么建议吗?

英文:

I have a function that takes in a double as a paramater. However, if I input "8" when I call the function, it processes as "8.0".

I know that I can format it with String.format() and other methods, however the format that the number is inputted as is important to the result (8 has a different result than 8.0, and I have no idea inside of the function body which one was intended by the user).

I know that I can add a format parameter as well as the double, function(double d, DecimalFormat f), but that would make it much more tedious to use, and it is intended as a util function anyways. Any tips?

答案1

得分: 1

有几种方法可以解决这个问题,取决于你的问题。

  1. 方法重载

如果用户输入是通过代码提供的,你可以使用相同的方法名处理不同类型。

class Program {
    public static void foo(int n) {
        // 输入是整数
        System.out.println(n);
    }

    public static void foo(double x) {
        // 输入是双精度浮点数
        System.out.println(x);
    }

    public static void main(String[] args) {
        foo(8); // 输出 8
        foo(8.0); // 输出 8.0
    }
}
  1. 处理字符串

然而,如果用户输入是通过键盘输入的,你可以使用正则表达式(RegEx)。

class Program {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String input = s.nextLine();

        if (input.matches("^\\d+\\.\\d+$")) {
            // 输入是双精度浮点数
        } else if (input.matches("\\d+")) {
            // 输入是整数
        } else {
            // 输入是其他内容
        }
    }
}
英文:

There are some ways you can solve this, depending on your problem.

  1. Method overloading

If the user input is by code, you can handle different types using the same method name.

class Program {
    public static void foo(int n) {
        // The input is an integer
        System.out.println(n);
    }

    public static void foo(double x) {
        // The input is a double
        System.out.println(x);
    }

    public static void main(String[] args) {
        foo(8); // prints 8
        foo(8.0); // prints 8.0
    }
}
  1. Handling strings

However, if the user input is by keyboard, for example, you can use RegEx.

class Program {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String input = s.nextLine();

        if (input.matches("^\\d+\\.\\d+$")) {
            // The input is a double
        } else if (input.matches("\\d+")) {
            // The input is an integer
        } else {
            // The input is something else
        }
    }
}

huangapple
  • 本文由 发表于 2020年9月7日 00:50:43
  • 转载请务必保留本文链接:https://go.coder-hub.com/63766602.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定