Java 精确计算-double-float-String
来源:互联网 发布:网络倾听者收费? 编辑:程序博客网 时间:2024/04/27 18:54
package com.tht.common.arithmetic.math;import java.math.BigDecimal;import java.text.DecimalFormat;/** * Created by IntelliJ IDEA. * User: T.H.T * Date: 2010-11-2 * Time: 17:18:13 * To change this template use File | Settings | File Templates. * 由于Java中的double,float不能精确的进行运算,所以用些工具类来代替常用的 加,减,乘,除 */public class ThtBigDecimal { /** * 默认的除法精度为两位 */ public static final int DEF_DIV_SCALE=2; /** * 精确的加法运算 * @param d1 第一个加数 * @param d2 第二个加数 * @return double 型结果 */ public static BigDecimal add(double d1,double d2){ BigDecimal b1=new BigDecimal(Double.toString(d1)); BigDecimal b2=new BigDecimal(Double.toString(d2)); return b1.add(b2); } /** * 精确的加法运算 * @param d1 第一个加数 * @param d2 第二个加数 * @return double 型结果 */ public static BigDecimal add(int d1,int d2){ BigDecimal b1=new BigDecimal(Integer.toString(d1)); BigDecimal b2=new BigDecimal(Integer.toString(d2)); return b1.add(b2); } /** * 精确的加法运算 * @param d1 第一个加数 * @param d2 第二个加数 * @return double 型结果 */ public static BigDecimal add(String d1,String d2){ BigDecimal b1=new BigDecimal(d1); BigDecimal b2=new BigDecimal(d2); return b1.add(b2); } /** * 精确的减法运算 * @param d1 被减数 * @param d2 减数 * @return double 型结果 */ public static BigDecimal sub(double d1,double d2){ BigDecimal b1=new BigDecimal(Double.toString(d1)); BigDecimal b2=new BigDecimal(Double.toString(d2)); return b1.subtract(b2); } /** * 精确的减法运算 * @param d1 被减数 * @param d2 减数 * @return double 型结果 */ public static BigDecimal sub(int d1,int d2){ BigDecimal b1=new BigDecimal(Integer.toString(d1)); BigDecimal b2=new BigDecimal(Integer.toString(d2)); return b1.subtract(b2); } /** * 精确的减法运算 * @param d1 被减数 * @param d2 减数 * @return double 型结果 */ public static BigDecimal sub(String d1,String d2){ BigDecimal b1=new BigDecimal(d1); BigDecimal b2=new BigDecimal(d2); return b1.subtract(b2); } /** * 精确的乘法运算 * @param d1 因数一 * @param d2 因数二 * @return double 型结果 */ public static BigDecimal mul(double d1,double d2){ BigDecimal b1=new BigDecimal(Double.toString(d1)); BigDecimal b2=new BigDecimal(Double.toString(d2)); return b1.multiply(b2); } /** * 精确的乘法运算 * @param d1 因数一 * @param d2 因数二 * @return double 型结果 */ public static BigDecimal mul(int d1,int d2){ BigDecimal b1=new BigDecimal(Integer.toString(d1)); BigDecimal b2=new BigDecimal(Integer.toString(d2)); return b1.multiply(b2); } /** * 精确的乘法运算 * @param d1 因数一 * @param d2 因数二 * @return double 型结果 */ public static BigDecimal mul(String d1,String d2){ BigDecimal b1=new BigDecimal(d1); BigDecimal b2=new BigDecimal(d2); return b1.multiply(b2); } /** * 精确的除法运算,默认保留两位小数,指定小数精确4位数如:div(65.22,2.13,4); div(double d1,double d2,int scale) * @param d1 被除数 * @param d2 除数 * @return double 型结果 */ public static BigDecimal div(double d1,double d2){ return div( d1, d2,DEF_DIV_SCALE); } /** * 精确的除法运算,默认保留两位小数,指定小数精确4位数如:div(65.22,2.13,4); div(double d1,double d2,int scale) * @param d1 被除数 * @param d2 除数 * @return double 型结果 */ public static BigDecimal div(int d1,int d2){ return div( d1, d2,DEF_DIV_SCALE); } /** * 精确的除法运算,默认保留两位小数,指定小数精确4位数如:div(65.22,2.13,4); div(double d1,double d2,int scale) * @param d1 被除数 * @param d2 除数 * @return double 型结果 */ public static BigDecimal div(String d1,String d2){ return div( d1, d2,DEF_DIV_SCALE); } /** * 精确的除法运算 * @param d1 被除数 * @param d2 除数 * @param scale 小数点精确的位数 * @return double 型结果 */ public static BigDecimal div(double d1,double d2,int scale){ if(scale<0){ throw new IllegalArgumentException("The scale must be 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); } /** * 精确的除法运算 * @param d1 被除数 * @param d2 除数 * @param scale 小数点精确的位数 * @return double 型结果 */ public static BigDecimal div(int d1,int d2,int scale){ if(scale<0){ throw new IllegalArgumentException("The scale must be positive integer or zero"); } BigDecimal b1=new BigDecimal(Integer.toString(d1)); BigDecimal b2=new BigDecimal(Integer.toString(d2)); return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP); } /** * 精确的除法运算 * @param d1 被除数 * @param d2 除数 * @param scale 小数点精确的位数 * @return double 型结果 */ public static BigDecimal div(String d1,String d2,int scale){ if(scale<0){ throw new IllegalArgumentException("The scale must be positive integer or zero"); } BigDecimal b1=new BigDecimal(d1); BigDecimal b2=new BigDecimal(d2); return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP); } /** * 精确的四舍五入 * @param d 需要精确的数据 * @param scale 精确的精度 * @return double 型结果 */ public static BigDecimal round(double d,int scale){ BigDecimal b1=new BigDecimal(Double.toString(d)); BigDecimal one=new BigDecimal("1"); return b1.divide(one,scale,BigDecimal.ROUND_HALF_UP); } /** * 精确的四舍五入 * @param d 需要精确的数据 * @param scale 精确的精度 * @return double 型结果 */ public static BigDecimal round(int d,int scale){ BigDecimal b1=new BigDecimal(Integer.toString(d)); BigDecimal one=new BigDecimal("1"); return b1.divide(one,scale,BigDecimal.ROUND_HALF_UP); } /** * 精确的四舍五入 * @param d 需要精确的数据 * @param scale 精确的精度 * @return double 型结果 */ public static BigDecimal round(String d,int scale){ BigDecimal b1=new BigDecimal(d); BigDecimal one=new BigDecimal("1"); return b1.divide(one,scale,BigDecimal.ROUND_HALF_UP); } /** * 精确的四舍五入,默认为了位小数 * @param d 需要精确的数据 * @return double 型结果 */ public static BigDecimal round(double d){ return round(d,2); } /** * 精确的四舍五入,默认为了位小数 * @param d 需要精确的数据 * @return double 型结果 */ public static BigDecimal round(int d){ return round(d,2); } /** * 精确的四舍五入,默认为了位小数 * @param d 需要精确的数据 * @return double 型结果 */ public static BigDecimal round(String d){ return round(d,2); } /** * 格式化数字 * @param number 需要格式化的数字 * @param formatStr 字符串格式 如:0.00 * @return */ public static String format(long number,String formatStr){ DecimalFormat df = new DecimalFormat(formatStr); return df.format(number); } /** * 格式化数字,默认格式为0.00 * @param number * @return */ public static String format(long number){ return format(number,"0.00"); } /** * 格式化数字,默认格式为0.00 * @param number * @return */ public static String format(double number){ return format(number,"0.00"); } /** * 格式化数字 * @param number 需要格式化的数字 * @param formatStr 字符串格式 如:0.00 * @return */ public static String format(double number,String formatStr){ DecimalFormat df = new DecimalFormat(formatStr); return df.format(number); } /** * 格式化数字 * @param number 需要格式化的数字 * @param formatStr 字符串格式 如:0.00 * @return */ public static String format(Object number,String formatStr){ DecimalFormat df = new DecimalFormat(formatStr); return df.format(Double.valueOf(String.valueOf(number))); } /** * 格式化数字,默认格式为0.00 * @param number * @return */ public static String format(Object number){ return format(Double.valueOf(String.valueOf(number)),"0.00"); }}
文章出处:
http://thinktothings.iteye.com/blog/801301
http://thinktothings.iteye.com/blog/801301
- Java 精确计算-double-float-String
- 天天记录 - Java 精确计算避免使用float和double
- 精确计算java中float和double的精度
- Java精确计算,用BigDecimal来处理int、double、float等之间的计算
- java double float 精度计算
- [读书笔记][Effective Java]不要在精确计算中使用float和double类型
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java浮点数float和double精确计算的精度误差问题总结
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
- Java中浮点型数据Float和Double进行精确计算的问题
- Java浮点数float和double精确计算的精度误差问题总结
- Java浮点数float和double精确计算的精度误差问题总结
- Java浮点数float和double精确计算的精度误差问题总结
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
- 不要在精确计算中使用float和double类型
- Anndroid:自定义Menu(TabMenu)
- ling to sql 中出现错误“已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭”原因及解决方法
- tapworthy读书笔记二
- Delphi制作DLL(收集)
- VLC在Ubuntu下cross compile总结
- Java 精确计算-double-float-String
- 音视频编解码 文件格式 协议内容详解
- 【模板方法模式】
- 音视频编解码 文件格式 协议内容详解
- Android apk 反编译
- XP系统“Windows无法配置此无线连接”的解决办法
- 四极管 EBOOT调试(下载功能OEM函数)
- 虚拟机VMware的“Cannot connect virtual device floppy0”解决方法
- Struts2 jquery autocomplete应用