Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否根据用户选项设置BigDecimal RoundingMode,而不使用if语句?_Java_Android_Bigdecimal - Fatal编程技术网

Java 是否根据用户选项设置BigDecimal RoundingMode,而不使用if语句?

Java 是否根据用户选项设置BigDecimal RoundingMode,而不使用if语句?,java,android,bigdecimal,Java,Android,Bigdecimal,我有大约400条语句使用了RoundingMode.HALF_UP,根据应用程序的性质,我希望用户能够在舍入模式之间进行选择。然而,如果可能的话,我不知道如何将其表示为变量。由于语句数量惊人,我希望避免使用if语句 可以按我的要求做吗? 我试过枚举,但我能想到的就这些了。其他一切都通过了大约半行。谷歌没有帮助。欢迎提出任何建议。试试这个 RoundingMode roundingMode = ...; ... BigDecimal bd3 = bd1.divide(bd2, 2, roundin

我有大约400条语句使用了
RoundingMode.HALF_UP
,根据应用程序的性质,我希望用户能够在舍入模式之间进行选择。然而,如果可能的话,我不知道如何将其表示为变量。由于语句数量惊人,我希望避免使用
if
语句

可以按我的要求做吗?

我试过枚举,但我能想到的就这些了。其他一切都通过了大约半行。谷歌没有帮助。欢迎提出任何建议。

试试这个

RoundingMode roundingMode = ...;
...
BigDecimal bd3 = bd1.divide(bd2, 2, roundingMode);

如果我没有错,那么您正在寻找用户选择和实际
RoundingMode
对象之间的映射,以传递给您的计算。为此,
RoundingMode
提供了返回所有可用
RoundingModes
values()
方法。您可以使用这些选项为用户提供选择选项

    RoundingMode[] modes = RoundingMode.values();
    for (RoundingMode roundingMode : modes) {
        System.out.println(roundingMode.name());
    }
选择一个值后,您可以通过以下方式找到要在计算中使用的
RoundingMode
对象:

      RoundingMode.valueOf(String) 
这将为您提供相应的
RoundingMode


希望这有帮助。

也许您可以使用反射并在运行时调用这些方法。这可能会为您节省400个case/if/else语句我很抱歉问一个愚蠢的问题,但您所说的反思到底是什么意思?您计划如何调用RoundingMode.HALF_?我会有一个类来保存这些信息。唯一的工作就是知道用户选择了哪种舍入方法,然后在被询问时提供这些信息。类似于
myBigDecimal.setScale(2,UsersRoundingMode.getRoundingMode())
用户从两个微调器中选择两个单位,输入一个BigDecimal形式的值,根据公式除以另一个单位,其中-
返回d.divide(d2,小数,RoundingMode.HALF_UP).toString()