Java中toFixed函数的替代方法

时间:2017-04-04 11:24:42

标签: java math

我有最后2位数阀门​​必须是圆形的值。我可以在JavaScript toFixed(6)中实现此功能。但是我们如何在java代码中实现相同的目标

示例:

Input=75.74306816000052
Input =26.910038862000476

Output=75.743070
Output=26.910040

代码:

BigDecimal Output= new BigDecimal(Input).setScale(6, RoundingMode.HALF_EVEN)

但是听到的输出值是

75.743068
26.910038

2 个答案:

答案 0 :(得分:1)

由于你帖子中的评论已经说明,java中的舍入是正确的,我不确定你想要实现什么。但这会为您提供您期望的输出:

public static void main(String[] args) throws Exception {
    String Input="75.74306816000052";
    String Input2 = "26.910038862000476";
    BigDecimal Output= new BigDecimal(Input).setScale(5, RoundingMode.HALF_EVEN);
    System.out.println(Output.setScale(6)); //75.743070
    BigDecimal Output2= new BigDecimal(Input2).setScale(5, RoundingMode.HALF_EVEN);
    System.out.println(Output2.setScale(6)); //26.910040
}

答案 1 :(得分:0)

为什么不使用String::format并将字符串转换为BigDecimal,如下所示:

String num1 = String.format(Locale.UK, "%.5f", 75.74306816000052);
String num2 = String.format(Locale.UK, "%.5f", 26.910038862000476);
//----------------------------------------^-----------------------

BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);

System.out.println(b1);
System.out.println(b2);

这可以为您提供:

75,74307
26,91004

修改

您的解决方案完美无缺,但有5而不是6:

BigDecimal Output= new BigDecimal(26.910038862000476).setScale(5, RoundingMode.HALF_EVEN);

此印刷品:

26.91004