- 浏览: 537545 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
xuehanxin:
修改tomcat-maven-plugin启动端口 -
maimode:
嗯,受用了。
java移动文件 -
huqing2010:
不灵!
java移动文件 -
yhx432:
zk1878 写道楼主,直接在eclipse中使用file-& ...
将maven2创建的web项目转为myEclipse项目 -
zk1878:
楼主,直接在eclipse中使用file->import ...
将maven2创建的web项目转为myEclipse项目
package com.org.assistant.util;
import java.math.BigDecimal;
public class Arith {
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
//默认除法运算精度
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();
}
/**
* 提供精确的类型转换(Float)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static float convertsToFloat(double v){
BigDecimal b = new BigDecimal(v);
return b.floatValue();
}
/**
* 提供精确的类型转换(Int)不进行四舍五入
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static int convertsToInt(double v){
BigDecimal b = new BigDecimal(v);
return b.intValue();
}
/**
* 提供精确的类型转换(Long)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static long convertsToLong(double v){
BigDecimal b = new BigDecimal(v);
return b.longValue();
}
/**
* 返回两个数中大的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中大的一个值
*/
public static double returnMax(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.max(b2).doubleValue();
}
/**
* 返回两个数中小的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中小的一个值
*/
public static double returnMin(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.min(b2).doubleValue();
}
/**
* 精确对比两个数字
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
*/
public static int compareTo(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.compareTo(b2);
}
}
import java.math.BigDecimal;
public class Arith {
/**
* 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精
* 确的浮点数运算,包括加减乘除和四舍五入。
*/
//默认除法运算精度
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();
}
/**
* 提供精确的类型转换(Float)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static float convertsToFloat(double v){
BigDecimal b = new BigDecimal(v);
return b.floatValue();
}
/**
* 提供精确的类型转换(Int)不进行四舍五入
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static int convertsToInt(double v){
BigDecimal b = new BigDecimal(v);
return b.intValue();
}
/**
* 提供精确的类型转换(Long)
* @param v 需要被转换的数字
* @return 返回转换结果
*/
public static long convertsToLong(double v){
BigDecimal b = new BigDecimal(v);
return b.longValue();
}
/**
* 返回两个数中大的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中大的一个值
*/
public static double returnMax(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.max(b2).doubleValue();
}
/**
* 返回两个数中小的一个值
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 返回两个数中小的一个值
*/
public static double returnMin(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.min(b2).doubleValue();
}
/**
* 精确对比两个数字
* @param v1 需要被对比的第一个数
* @param v2 需要被对比的第二个数
* @return 如果两个数一样则返回0,如果第一个数比第二个数大则返回1,反之返回-1
*/
public static int compareTo(double v1,double v2){
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.compareTo(b2);
}
}
评论
6 楼
zyfine
2009-01-19
double类型的数据 本来就是不精确的
你同样定义两个double类型的数据1.0
他们可能相等 也可能不相等
可能一个是0.99999999 一个是1.000001
你同样定义两个double类型的数据1.0
他们可能相等 也可能不相等
可能一个是0.99999999 一个是1.000001
5 楼
td-andy
2008-10-23
BigDecimal b1 = new BigDecimal(Double.toString(v1));
快一年了啊 Double.toString() 想不通为什么要这么构造BigDecimal
快一年了啊 Double.toString() 想不通为什么要这么构造BigDecimal
4 楼
td-andy
2008-10-23
BigDecimal b1 = new BigDecimal(Double.toString(v1));
快一年了啊 Double.toString() 想不通为什么要这么构造BigDecimal
快一年了啊 Double.toString() 想不通为什么要这么构造BigDecimal
3 楼
junjun
2007-11-29
高手高手
赞一个啊
赞一个啊
2 楼
xiuying
2007-11-23
我刚才在四台机器上都试过了都是77.1646 没问题哦
如果你试着不转换直接输出C呢?
出现0000001只有double类型在做减、乘、除的时候会出现这个问题!
如果你试着不转换直接输出C呢?
出现0000001只有double类型在做减、乘、除的时候会出现这个问题!
1 楼
xmeda
2007-11-23
我仔使用的时候
用如下代码
BigDecimal a=BigDecimal.valueOf(8.209);
BigDecimal c=BigDecimal.valueOf(9.40).multiply(a);
double d=c.doubleValue();
在不同的机子上得到不同的精度值 77.1646 和77.16460000000001
不知道是咋回事 代码一摸一样
用如下代码
BigDecimal a=BigDecimal.valueOf(8.209);
BigDecimal c=BigDecimal.valueOf(9.40).multiply(a);
double d=c.doubleValue();
在不同的机子上得到不同的精度值 77.1646 和77.16460000000001
不知道是咋回事 代码一摸一样
发表评论
-
sh+tomcat 启动时报内存溢出
2013-11-27 13:59 990ERROR o.s.web.context.ContextLo ... -
将java项目设置为web项目
2011-05-26 11:46 1467修改项目的.project文件,保存. 在< ... -
java 定时器
2010-04-12 13:15 1412引入定时器相应的jar包。 第一步编写实现类Quart ... -
Java compiler level does not match the version of the installed Java project
2009-12-08 11:02 2538错误:Java compiler level does not ... -
eclipse 常用插件安装地址
2009-11-30 13:04 62481. 安装 Subclipse要安装Subclipse,使用下 ... -
kubuntu下安装eclipse3.5.1点击按钮不行,只能用enter键
2009-11-30 13:01 1219kubuntu下安装eclipse3.5.1在线更新插件的时候 ... -
Flex Builder 3.0 For MyEclipse 7.0M1 安装方法
2009-11-24 17:29 2506今天突然说要搞flex,所以就在网上搞了点环境安装的方法 F ... -
基于fileupload文件批量上传
2008-11-11 11:44 3391执行类: /** * @author LXY * @date ... -
关于JAVA的Date
2008-03-21 10:30 11891.计算某一月份的最大天数 Calendar time=Ca ... -
jdk5的装箱与拆箱
2007-12-13 21:08 1295java的8个基本类型: 整数:short byte lon ... -
限制使用泛型可用类型
2007-12-09 15:48 1424package com.jdk150.bean; impor ... -
jdk1.5泛型的应用
2007-12-09 14:52 1725package com.jdk150.bean; impor ... -
1.5下数组可以这样输出
2007-11-30 15:06 1404String stra[]={"1",&q ... -
java递归删除文件和文件夹
2007-10-24 14:13 4768public class DelFileTest() { ... -
用jndi连接数据库
2007-10-17 16:08 2742在appContext下配: <bean id=&quo ... -
无法解析类型 java.lang.Object。从必需的 .class 文件间接引用了它
2007-09-29 22:29 16320今天突然碰到一个郁闷问题 无法解析类型 java.lang.O ... -
java移动文件
2007-09-20 18:03 10556//文件原地址 File oldFile = new ... -
JAVA格式化日期
2007-09-13 09:34 2551Date dd = new Date(); //String ... -
需求分析的20条法则
2007-09-11 09:06 1430需求分析的20条法则 邢 ... -
java创建和删除文件夹、文件
2007-09-04 14:48 7939//新建一个文件夹 public void newFolde ...
相关推荐
Java对BigDecimal常用方法的归类(加减乘除).doc
JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.
BigDecimal类,常用方法是用介绍
javascript的数值精确计算类bigdecimal,改编自java的bigdecimal
BigDecimal的计算
alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10").subtract(new BigDecimal("3E+10"))); //* alert(new BigDecimal("10").multiply(new BigDecimal("3E+10"))); // / ...
BigDecimal 使用方法小节:包含构造方法及和、差、商、积等运算方式
BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别...
BigDecimal工具类.docx
复杂的BigDecimal计算,需要开方的式子,可输入结果精确位数
主要介绍了java中BigDecimal的操作方法,较为详细的分析了BigDecimal类在进行商业计算时的应用方法,精度以及注意事项等问题,需要的朋友可以参考下
java丢失精度,bigdecimal加减乘除
在 Java 编程中,经常需要对数字类型的数据进行转换。其中,BigDecimal 是一种高精度的十进制浮点数类型,适合处理大数值计算。在一些需求中,我们可能需要将 BigDecimal 值转换为 Integer 类型。这时,可以使用 ...
BigDecimal向Double转换
BigDecimal的大小比较,1.0与1.00是不相等的,得采用它自带的compareTo方法: java 代码 int i=b1.compareTo(b2) 这一次,返回的i可能为-1、0、1,分别表示小于、等于、大于 构造函数:解决了上面这个问题好像...
bigdecimal转integer
bigdecimal加减乘除运算
string转bigdecimal类型
详细的描述BigDecimal的用法,使你能很快对BigDecimal有较深的认识
BigInteger.java BigDecimal.java 文件 源代码