double t1=34.0;
double t2=2.55
System.out.println(t1*t2);
结果不等于 86.7
解决方案 采用 java.math.BigDecimal
此处有一个通用类
import java.math.BigDecimal;
/** */ /**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
public class Arith{
//默认除法运算精度
private static final int DEF_DIV_SCALE = 10 ;
//这个类不能实例化
private Arith(){
}
/** */ /**
* 提供精确的加法运算。
* @param v1 被加数
* @param v2 加数
* @return 两个参数的和
*/
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();
}
/** */ /**
* 提供精确的减法运算。
* @param v1 被减数
* @param v2 减数
* @return 两个参数的差
*/
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();
}
/** */ /**
* 提供精确的乘法运算。
* @param v1 被乘数
* @param v2 乘数
* @return 两个参数的积
*/
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();
}
/** */ /**
* 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到
* 小数点以后10位,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @return 两个参数的商
*/
public static double div( double v1, double v2){
return div(v1,v2,DEF_DIV_SCALE);
}
/** */ /**
* 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指
* 定精度,以后的数字四舍五入。
* @param v1 被除数
* @param v2 除数
* @param scale 表示表示需要精确到小数点以后几位。
* @return 两个参数的商
*/
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();
}
/** */ /**
* 提供精确的小数位四舍五入处理。
* @param v 需要四舍五入的数字
* @param scale 小数点后保留几位
* @return 四舍五入后的结果
*/
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();
}
}
分享到:
相关推荐
使用Java,double 进行运算时,经常出现精度丢失的问题,总是在一个正确的结果左右偏0.0000**1。 特别在实际项目中,通过一个公式校验该值是否大于0,如果大于0我们会做一件事情,小于0我们又处理其他事情。 这样的...
Java Double相加出现的怪事,浮点运算不精确问题
下面小编就为大家带来一篇java中double类型运算结果异常的解决方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。...
Java中的简单浮点数类型float和double不能够进行运算,因为大多数情况下是正常的,但是偶尔会出现如上所示的问题。这个问题其实不是JAVA的bug,因为计算机本身是二进制的,而浮点数实际上只是个近似值,所以从二进制...
NULL 博文链接:https://thinktothings.iteye.com/blog/801301
import java.io.*; public class Book{ double sb; double xb; Book(double x,double y){ this.sb=x; this.xb=y; } Book(){ } public static void main(String args[]){ System.out.println("请...
1. 编写一个类实现复数的运算。 复数类ComplexNumber的属性: m_dRealPart:实部,代表复数的实数部分。 m_dImaginPart:虚部,代表复数的虚数部分。 复数类ComplexNumber的方法: ComplexNumber():构造函数,...
(2)编写一个包含主方法main的公共类(访问权限为public的类),主方法main中完成的任务是:从键盘上输入两个运算数(double 类型)和一个运算符(char 类型),使用(1)中的类输出运算结果(保留两位小数)。...
Java中BigInteger的数学运算,BigDecimal 加减乘除运算,Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大...
在Java和MySQL中,小数的精度可能会受到限制,如float类型的小数只能精确到6-7位,double类型也只能精确到15-16位。 浮点数运算问题 在进行浮点数运算时,可能会出现精度丢失的问题,例如0.1+0.2的结果并不等于0.3...
不同类型数据间的优先关系如下: 低--------------------------------------------->⾼ byte,short,char-> int -> long -> float -> double 运算中,不同类型的数据先转化为同⼀类型,然后进⾏运算,转换规则如下: ...
唔,其实里面就是一个工具类,加减乘除、保留两位小数。一共5个方法。。。emmmm........因为宝宝想分想疯了。... Double bDouble=Calculation.sub(99.2,aDouble); System.out.println(bDouble); } }
北京动力节点-Java编程零基础教程-059-Java基本语法-数据类型-float与double的区别.avi 北京动力节点-Java编程零基础教程-060-Java基本语法-数据类型-布尔型.avi 北京动力节点-Java编程零基础教程-061-Java基本...
double不能参与乘,除运算,请用BigDecimal,BigInteger金额从19.9===>19.89了。double priceFen = price
java基本数据类型 ⼀个Java程序可以认为是⼀系列对象的集合,⽽这些对象通过调⽤彼此的⽅法来协同⼯作。 对象:对象是类的⼀个实例,有状态(属性)和⾏为(⽅法)。 类:类是⼀个模板,他描述⼀类对象的⾏为和状态...
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。这篇文章主要介绍了Java BigDecimal使用指南针(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,...
I. Implement Matrix Operations in Java import java.text.DecimalFormat; /** * 实现矩阵的运算 ... * - add(Matrix target), multiply(double target): Linear Operations(线性运算) * - multiply(Matrix tar
2 java中double类型数据运算不精确问题的解决办法(采用java.math.BigDecimal类来进行精确计算。) 3 get方式传值乱码问题解决 4 查询被锁的数据,解锁 ,数据库连接数 5 下拉框的数据回显 6 mybatis批量更新,批量...
java数学计算工具类 double精确的加法算法 double精确的减法算法 精确的乘法算法 对精确的除法运算,当发生除不尽的 保留小数、数值精度