Java 是否根据用户选项设置BigDecimal RoundingMode,而不使用if语句?
我有大约400条语句使用了Java 是否根据用户选项设置BigDecimal RoundingMode,而不使用if语句?,java,android,bigdecimal,Java,Android,Bigdecimal,我有大约400条语句使用了RoundingMode.HALF_UP,根据应用程序的性质,我希望用户能够在舍入模式之间进行选择。然而,如果可能的话,我不知道如何将其表示为变量。由于语句数量惊人,我希望避免使用if语句 可以按我的要求做吗? 我试过枚举,但我能想到的就这些了。其他一切都通过了大约半行。谷歌没有帮助。欢迎提出任何建议。试试这个 RoundingMode roundingMode = ...; ... BigDecimal bd3 = bd1.divide(bd2, 2, roundin
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()我没有意识到你可以做那样的事。永远学习!虽然Evgeniy的答案是有效的,但这是相当有用的。非常感谢。