当前位置: 首页 > 知识库问答 >
问题:

至少有两个小数的BigDecimal

韦高阳
2023-03-14

我有bigdecimal值,我希望它们至少有两个十进制数字,但我不想修剪其余的数字。

new BigDecimal("3").add(new BigDecimal("0.00")) //=> 3.00
new BigDecimal("3.001").add(new BigDecimal("0.00")) //=> 3.001

是否有构建方法或更优雅的方法来实现这一点?

我不能使用setscale,因为我希望在存在其他小数时保留它们。

共有1个答案

勾海超
2023-03-14

实际上,您仍然可以使用setscale,只需检查当前的刻度是否大于2:

public static void main(String[] args) {
    BigDecimal bd = new BigDecimal("3.001");

    bd = bd.setScale(Math.max(2, bd.scale()));
    System.out.println(bd);
}

使用此代码,小数位数低于2的BigDecimal(如“3”)将其小数位数设置为2,如果不是,则保持其当前小数位数。

 类似资料:
  • 如何在Reactor中将一个发布者拆分为两个,这样就存在两个相同的数据流,可以在不同的流中处理下游的数据? 因此,我可以映射每个流并单独订阅每个流。 我在 API 中看不到任何表明这是在 API 上的内容。 在发布之前,我需要等到两个订阅者都启动并准备好。

  • 我使用的是OpenAPI3,有两个查询参数,其中至少有一个是必需的,但哪个并不重要。 这在OpenAPI3中可能吗?就我所见,规范和JSON模式规范中都没有提到它。

  • 问题内容: 当用户单击按钮时,我想显示一个弹出窗体,该​​窗体至少应具有两个JTextField和两个JLabel,因此不可能使用。 问题答案: 你至少应考虑诸如或的方法之一。 附录:使用铰链的选择更多地取决于模态的适用性,而不是所显示的组件数量。另请参见如何制作对话框。 附录:如@camickr的评论中所述,你可以使用Dialog Focus中讨论的方法将焦点设置为特定组件,此处引用。

  • 问题内容: 所以我将double设置为1234,我想将小数点后移至12.34 因此,我将.1乘以1234两次,就像这样 这将打印结果 有没有一种方法,不用简单地将其格式化为两位小数,就可以正确地保存双重存储12.34? 问题答案: 如果使用或,则应使用舍入或期望看到一些舍入错误。如果你无法执行此操作,请使用。 你遇到的问题是0.1不是精确的表示形式,并且通过执行两次计算,你正在使该错误复杂化。 但

  • 我的条件... 字母数字值 只允许使用一个空格或连字符 必须包含至少一个数字 不能以空格或连字符开头或结尾 最少2个字符,最多16个字符,不包括空格/连字符 到现在为止,我准备了正则表达式 它只遗漏了第三点。 测试字符串有效 无效