import java.text.DecimalFormat; public class Test01 { public static void main(String[] args) { long a = 5; long b = 10; double percent = (double)a / (a + b); DecimalFormat format = new DecimalFormat("0.00%"); String result = format.format(percent); System.out.println(result); } }需要将除号两端的任何一个数转为 float 或者是 double 才能计算出小数位数, 否则的话整数类型与整数类型计算得出的结果还是整数类型,直接用 long/long 或者 int/int 的话,得出的结果是数学值的舍尾取整。而转成 float 或 double 就不一样了,任何数与 float 和 double 进行计算时 会自动地进行类型提升,即将另外一个 long 数据提升到 double 类型再进行计 算的。写成这样也是一样的 a / (double)(a + b)
a/a+b和 a/(a+b)是两回事!long a=5; long b=10;String str=new String(a*1.0/(a+b)); str=str.subString(0,str.indexOf(".")+2);double c=Double.valueOf(str);
import java.math.*;class LongTest{ public static void main(String []args){ long a = 5; long b = 10;
BigDecimal x = BigDecimal.valueOf(a + b); BigDecimal d = BigDecimal.valueOf(a).divide(x, new MathContext(2));
public class Test01 { public static void main(String[] args) {
long a = 5;
long b = 10;
double percent = (double)a / (a + b);
DecimalFormat format = new DecimalFormat("0.00%");
String result = format.format(percent);
System.out.println(result);
}
}需要将除号两端的任何一个数转为 float 或者是 double 才能计算出小数位数,
否则的话整数类型与整数类型计算得出的结果还是整数类型,直接用 long/long
或者 int/int 的话,得出的结果是数学值的舍尾取整。而转成 float 或 double 就不一样了,任何数与 float 和 double 进行计算时
会自动地进行类型提升,即将另外一个 long 数据提升到 double 类型再进行计
算的。写成这样也是一样的 a / (double)(a + b)
long b=10;String str=new String(a*1.0/(a+b));
str=str.subString(0,str.indexOf(".")+2);double c=Double.valueOf(str);
public static void main(String []args){
long a = 5;
long b = 10;
BigDecimal x = BigDecimal.valueOf(a + b);
BigDecimal d = BigDecimal.valueOf(a).divide(x, new MathContext(2));
System.out.println("a / (a + b) = " + d);
}
}