在Java中,如何实现这种类型的数字舍入?

Sal*_*eek 5 java decimal rounding

我正在写一个小型物理应用程序.我打算做的是进行数字舍入.问题是它不是一个固定的舍入,而是一个取决于十进制数值的变量舍入.我将解释这个问题.

  • 我总是需要保留整个整数部分(如果有的话)和前五个十进制数字(如果有的话).
  • 总是使用半上舍入.

    21.1521421056变为21.15214
    34.1521451056变为34.15215

  • 如果结果只包含十进制数字,则:

    • 如果前五位数字包括非零数字,则保留它们.

      0.52131125变为0.52131
      0.21546874变为0.21547
      0.00120012变为0.0012

    • 如果前五位数字都是零位数0.00000,则前往包含非零数字的前五位数字.

      0.0000051234变为0.0000051234
      0.000000000000120006130031变为0.00000000000012001

我需要在工作时玩这个四舍五入,BigDecimal因为这是我需要的要求.

ajb*_*ajb 4

我认为,如果我正确理解你想要什么,基于实验,这会起作用。如果dBigDecimal包含数字的 a:

BigDecimal rounded = d.round(new MathContext
    (d.scale() - d.precision() < 5 
        ? d.precision() - d.scale() + 5 
        : 5));
Run Code Online (Sandbox Code Playgroud)