如何将java double减少到n位有效数字?

时间:2016-10-20 06:01:31

标签: java decimal bigdecimal decimalformat rounding-error

我希望打印小数字(doubles),以便使用Newton&打印错误。 Secant方法。

我的一个错误是5.433306166802499E-5

我想打印5.4333E-5

我想过使用BigDecimal,但我不熟悉这个课程。

4 个答案:

答案 0 :(得分:5)

  

我正在寻找打印小数字(双打)

System.out.printf("%.4e",  5.433306166802499E-5);

结果:5.4333e-05

注意:它不会降低原始值的精度,只是以低精度打印

答案 1 :(得分:1)

double d = 5.433306166802499E-5; BigDecimal dc = new BigDecimal(d); dc = dc .round(new MathContext(3)); // desired significant digits double rounded = dc .doubleValue();

答案 2 :(得分:0)

你确实可以使用BigDecimal,它看起来如下:

BigDecimal d = BigDecimal.valueOf(val).setScale(scale, RoundingMode.HALF_UP);
double scaled = d.doubleValue();

或者您可以使用:

Math.round(val*Math.pow(10, scale))/Math.pow(10, scale);

答案 3 :(得分:0)

要回答一般性问题,而不仅仅是使用System.out.printf打印的情况:

您可以使用f字符串插值器或format方法。

val a: Double = 5.433306166802499E-5
val reduced1: Double = f"$a%1.4e".toDouble
val reduced2: Double = "%1.4e".format(a).toDouble

两者相等:5.4333e-05