【问题标题】:java convert from double/bigDecimal/float to string with 4decimals approximationjava 从 double/bigDecimal/float 转换为具有 4decimals 近似值的字符串
【发布时间】:2015-12-03 18:41:32
【问题描述】:

我需要最多 4 位小数的精确数学,需要将其转换为字符串,以便进一步处理我的代码中的结果,如果结果超过 4 位,我希望得到结果近似值。 例如:对于 3.3333333333 -> 3.3334

我当前的代码很乱,但可以工作。有没有更简单的方法解决这个问题?

...............
Double rez = (Double) engine.eval(foo); // some rezult as double from the rest of code
        //convert foo to my string

 String implem = String.valueOf(rez);
 rezultat = implem;                     // rezultat -> is the string returned of the function

 if(implem.contains(".")){

 String []splitter =implem.split("\\.");
                                        //   System.out.println(splitter[0]+" length:"+splitter[0].length());
                                        //   System.out.println(splitter[1]+" length:"+splitter[1].length());
 if(splitter[1].length()>4){
 String ceva=splitter[1].substring(0,4);

     byte subb[]=ceva.getBytes();
     char c = (char)subb[3];
                                        //    System.out.println((char)subb[0]+">"+(char)subb[1]+">"+(char)subb[2]+">"+(char)subb[3]+" :those are the splits");
if(subb[0]==subb[1] && subb[1]==subb[2] && subb[2]==subb[3] && (char) subb[0]=='9'){    
//in case of 9999

long numer = Long.parseLong(splitter[0]);
numer++;
splitter[0]=String.valueOf(numer);
rezultat = splitter[0];
return rezultat;                        // program returns next Long value (without decimals)

}

                                        //   System.out.println(subb[0]+"+"+subb[1]+"+"+subb[2]+"+"+subb[3]+" value of subb[3]:"+c);
    if(c!='0'){
        int kappa = Integer.parseInt(ceva);
        kappa++;

        String partCeva = String.valueOf(kappa);                            //in case of integer<1000 -- add 0's
        while(partCeva.length()<4){
        partCeva= "0"+partCeva;
        }
           ceva=partCeva;
    }
    Double fin = Double.parseDouble(splitter[0]+"."+ceva);                  //do this to remove unwanted 0
     rezultat = fin.toString();

 }
 else{
    rezultat = splitter[0]+"."+splitter[1];
 }
...........
return rezultat ; }

【问题讨论】:

  • 如果您需要更精确的控制,为什么不使用 BigDecimal?

标签: java double decimal precision bigdecimal


【解决方案1】:

你可以的

double x = (Double) engine.eval(foo);

使用双精度或浮点数舍入为字符串。

return String.format("%4f", x);

使用 BigDecimal 舍入为字符串

return BigDecimal.valueOf(x).setScale(4, RoundingMode.HALF_UP).toString();

值 3.3333333333 通常四舍五入为 3.3333,但是有一种模式可以四舍五入到下一个值。

【讨论】:

  • 谢谢,由于挫败感,我已经尽一切努力解决这个问题:) 会尝试你的方法。
  • @Sanity 现在您对这些库必须做什么有了一定的了解。 ;)
  • 字符串测试 = BigDecimal.valueOf(x).setScale(4, RoundingMode.UP).toString(); System.out.println(test);这正是我需要使用 RoundingMode.UP
猜你喜欢
  • 2018-11-29
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多