java 从 double/bigDecimal/float 转换为具有 4 位小数近似值的字符串
java convert from double/bigDecimal/float to string with 4decimals approximation
我需要最多 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 ; }
你可以做到
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,但是有一种模式可以四舍五入到下一个值。
我需要最多 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 ; }
你可以做到
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,但是有一种模式可以四舍五入到下一个值。