java double类型

Python014

java double类型,第1张

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)

}

}

Double是类double是基础数据类型。Double类型是double的包装类,在JDK1.5以后,二者可以直接相互赋值,称为自动拆箱和自动装箱。如果是这样,可以用Double中的方法,将包装类转为基本数据类型。

可以转换的。

double和float的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double和float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)。

类型比特数有效数字数值范围

float326-7-3.4*10(-38)~3.4*10(38)

double6415-16-1.7*10(-308)~1.7*10(308)

longdouble12818-19-1.2*10(-4932)~1.2*10(4932)

简单来说,Float为单精度,内存中占4个字节,有效数位是7位(因为有正负,所以不是8位),在我的电脑且VC++6.0平台中默认显示是6位有效数字;double为双精度,占8个字节,有效数位是16位,但在我的电脑且VC++6.0平台中默认显示同样是6位有效数字。

double类型的包装类是Double;

备注:double是基本数据类型,Double是对象。但是现在的jdk1.5以上版本都是可以直接进行转换的,java会自动进行封装,所有使用上的区别不是很大的。

如果您在一定区间内初始化别的数,可以使用Fill方法。

第一步:声明数组。

double[]arr=newdouble[50];

第二步:填充。(比如都初始化成3.14)

Arrays.Fill(arr,3.14)。

JAVA中的数组没有动态的,要是想用动态的数据结构就用向量Vector。

采用Vector,importjava.until.Vector

例如:

Vectorvet==newVector()

Stringstr="test1"

doublet1=0.124

vet.add(str)

vet.add(String.valueOf(t1))

可以用vet.size()获取其大小。

通过vet.get(i)获取第i个元素(i从0开始),类型为Object,转换一下就可以了。