三九宝宝网宝宝百科宝宝知识

Java中 double类数据运算精度不准怎么解决

01月06日 编辑 39baobao.com

[如何提高python的计算精度]可以使用decimal模块来设置计算的精度。举个例子。 >>> from decimal import * >>> getcontext().prec = 6 >>> Decimal(1) / Decimal(7) Decimal('0.142857') >>> getconte...+阅读

在大多数情况下,使用double和float计算的结果是准确的,但是在一些精度要求很高的系统中,这种问题是非常严重的。在《Effective Java》中提到一个原则,那就是float和double只能用来作科学计算或者是工程计算,但在商业计算中我们要用java.math.BigDecimal,通过使用BigDecimal类可以解决上述问题,实例代码如下:

package ex;

import java.math.*;

public class 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));

}

}

class ArithUtil{

private static final int DEF_DIV_SCALE=10;

private ArithUtil(){}

//相加

public static double add(double d1,double d2){

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

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

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

}

//相减

public static double sub(double d1,double d2){

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

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

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

}

//相乘

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

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

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

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

}

//相除

public static double div(double d1,double d2){

return div(d1,d2,DEF_DIV_SCALE);

}

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

if(scale<0){

throw new IllegalArgumentException("The scale must be a positive integer or zero");

}

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

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

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

}

}

以下为关联文档:

python的浮点数运算是不是精度有问题阿再计算机的硬件中,浮点数以二进制小数表示。比如小数 [python] view plain copy 0.125 可看做1/10+2/100+5/1000,同样的方式二进制小数 [python] view plain copy 0.001 可看...

六年级简便运算题目小学六年级数学总复习资料(六) 【简便计算】 班级: 姓名: 一、口算下面各题。(23分) 10-2.65= 0.9*0.08= 528-349= 6+14.4= 24÷0.04= 12.34-2.3= 0÷3.8= 0.77+0.33= 7÷1.4= 67....

六年级数学题简便运算1.解:原式=(3/2-7/3+13/14)* -42 =(-21*3)-(-14*7)-(13*3) 乘法分配律 =-63+98-39 去括号 =(-60-3)+(100-2)-(40-1) =-60-3+100-2-40+1 =-3-2+1 =-4 2.解:原式=8*【(-22/7)*(-0.125)...

六年级数学简便运算题目○1 添(去)括号的应用 1、7.35-(1.9+2.35) 2、933-157-43 3、8.8-6.75+9.2-0.25 4、41*102 5、3.6+9.7+6.4 6、4.67-(2.98+0.67) 7、7.15-(2.7+4.15) 8、2.89+2.7+7.3+3.21 9...

决定计算机的计算精度的是什么字长决定了计算机的计算精度。 在同一时间中处理二进制数的位数叫字长。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。二进...

什么决定计算机的运算精度字长。 位(bit):一位二进制数,又称比特。 字节(byte):内存存储的最小单元。 字长:同一时间内,计算机能处理的二进制位数。字长决定了计算机的运算精度,字长越长,计算机的运算精度就越高...

决定计算机计算精度的主要技术指标是计算机的什么计算机系统的主要技术指标与系统配置: /1.计算机的主要性能指标 1)字长:字长是CPU能够直接处理的二进制数据位数,它直接关系到计算机的计算精度、功能和速度。字长越长处理能力...

在计算机技术指标中决定计算机的计算精度的是在计算机技术指标中,决定计算机的计算精度的是字长。 中央处理器是电脑的心脏,由运算器和控制器组成,内部结构分为控制器、运算器和存储器,这三个部分相互协调,可以进行判断、运...

C double类型数值怎样获得是精确到多少位小数求精度转换成字符串,判断小数点位置 首先判断是否有小数点,如果没有,得到结果0 如果有小数点,使用indexof判断小数点位置,然后根据字符串总长度,如123.45,得到小数点位置为3,总长度为6,那么...

推荐阅读
图文推荐