java double类型

java中double计算数字后,遇到比较大得数值,直接自动写成1.0E9,等等,请问能不能有什么办法让他继续为1000000000.

double类型直接进行运算会出现精度问题,可先转换为字符串之后再进行运算。
import java.math.BigDecimal;
public class Arith {
// 默认除法运算精度
private static final int DEF_DIV_SCALE = 10;

// 这个类不能实例化
private Arith() {
}
public static double add(double v1, double v2)
{
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return
b1.add(b2).doubleValue();
}

public static double sub(double v1, double v2)
{
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return
b1.subtract(b2).doubleValue();
}
public static double mul(double v1, double v2)
{
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return
b1.multiply(b2).doubleValue();
}
public static double div(double v1, double v2) {
return
div(v1, v2, DEF_DIV_SCALE);
}
public static double div(double v1, double v2, int scale)
{
if (scale < 0) {
throw new
IllegalArgumentException(
"The
scale must be a
positive integer or
zero");
}
BigDecimal b1 = new
BigDecimal(Double.toString(v1));
BigDecimal b2 = new
BigDecimal(Double.toString(v2));
return b1.divide(b2, scale,
BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static double round(double v, int scale) {
if
(scale < 0) {
throw new
IllegalArgumentException(
"The
scale must be a
positive integer or
zero");
}
BigDecimal b = new
BigDecimal(Double.toString(v));
BigDecimal one = new
BigDecimal("1");
return b.divide(one, scale,
BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
public class test {
public static void main(String[] args)
{
double d1=0.2;
double d2=0.1;
double
d3=d1+d2;
System.out.println(Arith.add(d1,
d2));
System.out.println(Arith.sub(d1,
d2));
System.out.println(d3);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-17
双精度数据运算问题
这里是一个已经写好的增加对双精度数据加减乘除运算时精度的帖子
里面的方法你直接拿去用就好,利用BigDecimal()转化一下
http://blog.csdn.net/pttaag/article/details/5912171本回答被提问者采纳
第2个回答  2011-09-17
这样就可以了
///// TEST.java /////////
public class TEST{
public static void main(String args[]){
double d = 1000000000;
System.out.printf("%f", d); //用printf,后面就可以根据你要的格式输出了
}
}
//////////////////////////////
输出:1000000000.000000追问

我是要将计算好的值,赋值给对象的属性,不是直接输出,对象的属性是string类型的

追答

怎么赋值,具体描述下

第3个回答  2011-09-17

输出是格式化就可以了。
相似回答