您的位置:

java中double如何相减,java double 除法运算

本文目录一览:

java double类型变量,相加或相减后面小数为什么会不一样呢?

该问题主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示1/10。就像我们平时使用的十进制中无法精确的表示1/3是一样的道理,如果需要在数值计算中不含有任何误差,要使用BigDecimal类进行编程。

具体的代码如下

//两个Double数值相加

public static Double add (Double value01,Double value02){

BigDecimal b1=new BigDecimal(value01.toString());

BigDecimal b2=new BigDecimal(value02.toString());

return b1.add(b2).doubleValue();

}

//两个Double数值相减

public static Double sub (Double value01,Double value02){

BigDecimal b1=new BigDecimal(value01.toString());

BigDecimal b2=new BigDecimal(value02.toString());

return b1.subtract(b2).doubleValue();

}

Java中 double 和 Double的区别 两者能互相转换和加减吗 求方法

double是基本的数据类型,Double是对象,是对double这个基本类型的封装。

关于Double的具体内容,可见Java的API手册。

java int double 加减法 基本类型运算问题

1.-2.8421709430404007E-14表示-2.8421709430404007乘以10的-14次方,计算机能准确表示十进制的整数,但不能准确表示十进制小数。System.out.println(150.0+0+183.28-0-183.28-150.0);150.0+0+183.28-0-183.28-150.0的结果为0.00000000000...,只不过你的输出结果为double型,精度比较高,没有超出打印函数(println之类的)的默认精度而已。

2.System.out.println(((150.00)+0.00+(183.28))-(0.00+(183.28)+(150.00)));中将((150.00)+0.00+(183.28))作为个运算单元,二个括号内的运算的结果肯定一样,与精度无关。结果当然为0。

3.用System.out.println((long)(150.0+0+183.28-0-183.28-150.0));(150.0+0+183.28-0-183.28-150.0)的结果为0.00000000...,转换成long,舍弃小数位,结果自然为0;

4.System.out.println(150.0F+0+183.28F-0-183.28F-150.0F); 运算结果为float型,超出打印函数(println之类的)的默认精度,截取下来为0。

不知道解释的你满意不?

java double数据类型运算问题

使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。

特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。

这样的情况通过double计算出来的结果去和0比较大小,尤其是有小数点的时候,经常会因为精度丢失而导致程序处理流程出错。

所以一般对double类型进行运算时,做好对结果进行处理,然后拿这个值去做其他事情。

目前总结如下:

/**

* 对double数据进行取精度.

* @param value double数据.

* @param scale 精度位数(保留的小数位数).

* @param roundingMode 精度取值方式.

* @return 精度计算后的数据.

*/

public static double round(double value, int scale,

int roundingMode) {

BigDecimal bd = new BigDecimal(value);

bd = bd.setScale(scale, roundingMode);

double d = bd.doubleValue();

bd = null;

return d;

}

/**

* double 相加

* @param d1

* @param d2

* @return

*/

public double sum(double d1,double d2){

BigDecimal bd1 = new BigDecimal(Double.toString(d1));

BigDecimal bd2 = new BigDecimal(Double.toString(d2));

return bd1.add(bd2).doubleValue();

}

/**

* double 相减

* @param d1

* @param d2

* @return

*/

public double sub(double d1,double d2){

BigDecimal bd1 = new BigDecimal(Double.toString(d1));

BigDecimal bd2 = new BigDecimal(Double.toString(d2));

return bd1.subtract(bd2).doubleValue();

}

/**

* double 乘法

* @param d1

* @param d2

* @return

*/

public double mul(double d1,double d2){

BigDecimal bd1 = new BigDecimal(Double.toString(d1));

BigDecimal bd2 = new BigDecimal(Double.toString(d2));

return bd1.multiply(bd2).doubleValue();

}

/**

* double 除法

* @param d1

* @param d2

* @param scale 四舍五入 小数点位数

* @return

*/

public double div(double d1,double d2,int scale){

// 当然在此之前,你要判断分母是否为0,

// 为0你可以根据实际需求做相应的处理

BigDecimal bd1 = new BigDecimal(Double.toString(d1));

BigDecimal bd2 = new BigDecimal(Double.toString(d2));

return bd1.divide

(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

这样,计算double类型的数据计算问题就可以处理了。

另外补充一下 JavaScript 四舍五入的方法:

小数点问题

Math.round(totalAmount*100)/100 (保留 2 位)

function formatFloat(src, pos)

{

return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);

}

关于JAVA double类型相减的问题

可以相减 你的写法有错

输出函数的原型是print(String) 也就是括号里面的是String类型

多个string连接的时候用就 " + " 连接 你这里出现了 " - " 号 这是不允许的(double类型默认会调用toString()将数据转换成string)

当你用:System.out.println("两个数的差是:"+a3-a4);减号被认为是错误的...

正确的写法应该是:System.out.println("两个数的差是:"+(a3-a4));

至于你说 加 可以 只怕结果不是你想要的吧

乘除是因为运算符的优先级问题可以

建议你去看一些相关的基础吧

java两个double变量相减

要不然结果是多少?

3.7238113E7

也就是3.7238113X10^7

a-b 当然就是那结果啊