Comment gérer les problèmes de double précision en JAVA

王林
Libérer: 2024-01-16 12:24:22
avant
963 Les gens l'ont consulté

Comment gérer les problèmes de double précision en JAVA

Comment gérer les problèmes de double précision en JAVA。比如1 2 3 3 599 996这种

double ajout statique public (double d1,double d2){

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

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

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

}

double sous statique public (double d1,double d2){

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

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

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

}

double mul statique public (double d1,double d2){

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

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

retourne b1.multiply(b2).doubleValue();

}

double div statique publique (double d1,double d2){

retour div(d1,d2,DEF_DIV_SCALE);

}

double div statique publique (double d1, double d2, échelle int){

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

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

}

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

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

retourne b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

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

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

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

Java efficace Il s'agit de java.math.BigDecimal et de BigDecimal.问题,实例代码如下:

forfait ex;

importer java.math.*;

classe publique BigDecimalDemo {

public static void main(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));

}

}

classe ArithUtil{

private static final int DEF_DIV_SCALE=10;

arithUtil privé(){}

//相加

double ajout statique public (double d1,double d2){

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

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

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

}

//相减

double sous statique public (double d1,double d2){

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

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

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

}

//相乘

double mul statique public (double d1,double d2){

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

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

retourne b1.multiply(b2).doubleValue();

}

//相除

double div statique publique (double d1,double d2){

retour div(d1,d2,DEF_DIV_SCALE);

}

double div statique publique (double d1, double d2, échelle int){

if(échelle lancer une nouvelle IllegalArgumentException("L'échelle doit être un entier positif ou zéro");

}

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

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

retourne b1.divide(b2,scale,BigDecimal.ROUND_HALF_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都是返回为true

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

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

而你的

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

则会先执行num1/num2,如果num1 et num2都int,都到的结果最终会是int,这里假设num1=6,num2=5,则num1/num2==1 为true,而不是1 .2,那么, avec une résolution double)res, une résolution avec une résolution numéro1/num2, une résolution = 1, une résolution double avec 1, avec une résolution 1.2

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:docexcel.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal