Rumah > tutorial komputer > pengetahuan komputer > Bagaimana untuk menangani isu ketepatan berganda dalam JAVA

Bagaimana untuk menangani isu ketepatan berganda dalam JAVA

王林
Lepaskan: 2024-01-16 12:24:22
ke hadapan
1027 orang telah melayarinya

Bagaimana untuk menangani isu ketepatan berganda dalam JAVA

Bagaimana untuk menangani isu ketepatan berganda dalam JAVA。比如1 2 3 3 599 996这种

tambahan berganda statik awam(d1 ganda,d2 berganda){

BigDecimal b1=BigDecimal baharu(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.tambah(b2).doubleValue();

}

sub berganda statik awam(berganda d1,berganda d2){

BigDecimal b1=BigDecimal baharu(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.tolak(b2).doubleValue();

}

multi berganda statik awam(berganda d1,berganda d2){

BigDecimal b1=BigDecimal baharu(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.darab(b2).doubleValue();

}

div berganda statik awam(berganda d1,berganda d2){

kembali div(d1,d2,DEF_DIV_SCALE);

}

div berkembar statik awam(d1 berganda,d2 berganda, skala int){

//skala 是小数点后要保留的位数

if(scalethrow new IllegalArgumentException("精度不能小于零");

}

BigDecimal b1=BigDecimal baharu(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.bahagi(b2,skala,BigDecimal.ROUND_SETENGAH_UP).doubleValue();

}

用的时候调用这几个方法。

java用double和float进行计算有时候精度不准确怎么办

在大多数情况下,使用double和float计算的结果是准确的,但是在一些精度要很高街非常严重的。

在《Java Berkesan》中提到一个原则,那就是float和double只能用来作科学计算或者是宗算或者是宗算管计算中我们要用java.math.BigDecimal,通过使用BigDecimal类可以解决上述问题,实例代码如下:

pakej bekas;

import java.math.*;

BigDecimalDemo kelas awam {

utama kekosongan statik awam(String[] args){

System.out.println(ArithUtil.add(0.01, 0.05));

System.out.println(ArithUtil.sub(1.0, 0.42));

System.out.println(ArithUtil.mul(4.015, 100));

System.out.println(ArithUtil.div(123.3, 100));

}

}

kelas ArithUtil{

int akhir statik peribadi DEF_DIV_SCALE=10;

peribadi ArithUtil(){}

//相加

tambahan berganda statik awam(d1 d1,d2){

BigDecimal b1=New BigDecimal(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.tambah(b2).doubleValue();

}

//相减

swatara berganda statik awam(berganda d1,berganda d2){

BigDecimal b1=New BigDecimal(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.tolak(b2).doubleValue();

}

//相乘

multi berganda statik awam(berganda d1,berganda d2){

BigDecimal b1=New BigDecimal(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.darab(b2).doubleValue();

}

//相除

div berganda statik awam(berganda d1,berganda d2){

kembali div(d1,d2,DEF_DIV_SCALE);

}

div berkembar statik awam(d1 berganda,d2 berganda, skala int){

jika(skala

buang IllegalArgumentException baharu("Skala mestilah integer positif atau sifar");

}

BigDecimal b1=New BigDecimal(Double.toString(d1));

BigDecimal b2=New BigDecimal(Double.toString(d2));

kembali b1.bahagi(b2,skala,BigDecimal.ROUND_SETENGAH_UP).doubleValue();

}

}

Java关于double和int的问题

两个int的值作除法运算,得到的为int,而且,得到的值是直接去掉小数部分。

假如:

int i=1;j=3;i/j==0 返回的为true

同理,i/3==0 1/3==0 1/j==0都是返回为benar

如果,double res=i/j 其返回的结果,不会是0.333...,而是0

如果你要得到为0.333...,则需要 res=((double)i)/j;

而你的

fReuslt=(int)((double)num1/num2)

则会先执行num1/num2,如果num1和num2都int,都到的结果最终会是int,这里假设num1=6,num2=5,则语=1/num ,那么,再执行(double)res,这里的res就是num1/num2,故res=1,所以double之后仍然为1,而不是1.2

Atas ialah kandungan terperinci Bagaimana untuk menangani isu ketepatan berganda dalam JAVA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan