如何将java双精度减少到n个有效数字?
我希望打印小数字(如何将java双精度减少到n个有效数字?,java,decimal,bigdecimal,decimalformat,rounding-error,Java,Decimal,Bigdecimal,Decimalformat,Rounding Error,我希望打印小数字(双精度),以便使用Newton和割线方法打印错误 我的一个错误是5.43330616802499E-5 我想打印5.4333E-5 我曾想过使用BigDecimal,但我不熟悉这个类 双d=5.43330616802499E-5; BigDecimal dc=新的BigDecimal(d); dc=dc.round(新的MathContext(3));//所需有效数字 双舍入=dc.doubleValue()双d=5.43330616802499E-5; BigDecimal
双精度
),以便使用Newton
和割线
方法打印错误
我的一个错误是5.43330616802499E-5
我想打印5.4333E-5
我曾想过使用
BigDecimal
,但我不熟悉这个类 双d=5.43330616802499E-5;
BigDecimal dc=新的BigDecimal(d);
dc=dc.round(新的MathContext(3));//所需有效数字
双舍入=dc.doubleValue()代码>
双d=5.43330616802499E-5;
BigDecimal dc=新的BigDecimal(d);
dc=dc.round(新的MathContext(3));//所需有效数字
双舍入=dc.doubleValue()代码>
我想打印小数字(双倍)
结果:5.4333e-05
注意:它不会降低原始值的精度,只是以较低的精度打印
我想打印小数字(双倍)
结果:5.4333e-05
注意:它不会降低原始值的精度,只是以较低的精度打印。您确实可以使用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);
您确实可以使用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);
要回答一般问题,而不仅仅是使用System.out.printf
打印的情况,请执行以下操作:
您可以使用f
字符串插值器或格式化方法
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
回答一般问题,而不仅仅是使用System.out.printf打印的情况:
您可以使用f
字符串插值器或格式化方法
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
您只需要格式化数字以便打印。不要乱动数值(即不要“减少到n位数”)。@ScaryWombat不同意。他只是想为输出设置一个双精度格式。@JimGarrison好的,看起来我在标题上放得太重了。你只是想设置数字格式以便打印。不要乱动数值(即不要“减少到n位数”)。@ScaryWombat不同意。他只是想为输出设置一个双精度格式。@JimGarrison好的,看起来我在标题上放得太重了。你漏掉了“e”格式说明符;我添加它是为了让你的答案真正起作用。@JimGarrison谢谢,我不知道我是如何丢失了e
你遗漏了“e”格式说明符的;我添加它是为了让你的答案真正起作用。@JimGarrison谢谢,我不知道我是如何丢失了e
第一个例子,因为逗号太多,如果val=5.43330616802499e-5
,结果是1.0E-4
,这与5.4333E-5
的预期输出相差很远。第一个例子是因为逗号太多,如果问题中给出的val=5.43330616802499e-5
,则结果为1.0E-4
,这与5.4333E-5
的预期输出相差甚远。