BigDecimal.setScale(int, int) 和 RoundingMode 枚举的弃用构造函数

新手上路,请多包涵

我正在尝试使用以下内容指定 BigDecimal 值的精度: new BigDecimal(12.99).setScale(2, BigDecimal.ROUND_HALF_EVEN 。但是,编译器告诉我 setScale(int, int) 已弃用。

当我尝试使用 RoundingMode 枚举时,它告诉我枚举可能尚未初始化。如何正确使用枚举来实例化 BigDecimals setScale(int, RoundingMode)

谢谢!

原文由 BenjaminJC 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

根据文档, setScale(int, int)Java 1.5 首次引入枚举以来就不再推荐:

应优先使用新的 setScale(int, RoundingMode) 方法,而不是此旧方法。

它最终在 Java 9 中被弃用。

您应该改为调用 setScale(2, RoundingMode.HALF_EVEN) 。它使错误检查变得更加简单,因为您不能传入未定义的 enum ,但您当然可以传入未定义的整数模式。

原文由 Mad Physicist 发布,翻译遵循 CC BY-SA 3.0 许可协议

您不应该“实例化”一个枚举,而应该使用它的常量。你有没有尝试过:

 new BigDecimal(12.99).setScale(2, RoundingMode.HALF_EVEN);

请注意,您还可以使用字符串构造函数:

 new BigDecimal("12.99");

原文由 assylias 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题