java实现精确的四舍五入[转]

简介:
代码:
import  java.math.BigDecimal;

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实现精确的四舍五入[转] ,如需转载请自行联系原博主。
目录
相关文章
|
5月前
|
Java
Java对double值进行四舍五入,保留两位小数的几种方法
Java对double值进行四舍五入,保留两位小数的几种方法
|
8月前
|
Java
java四舍五入保留有效数字
java四舍五入保留有效数字
84 0
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
561 0
|
分布式计算 Java Hadoop
Java实现单词计数MapReduce
本文分享实现单词计数MapReduce的方法
301 0
|
Java 数据安全/隐私保护
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
926 0
JAVA 实现上传图片添加水印(详细版)(上)
|
存储 Java
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
374 0
Java实现图书管理系统
|
Java Windows Spring
java实现spring boot项目启动时,重启Windows进程
java实现spring boot项目启动时,重启Windows进程
474 0
|
数据可视化 Java
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
如果要在某一个界面里面添加功能的话,都在一个类中,会显得代码难以阅读,而且修改起来也会很困难,所以我们将游戏主界面、登录界面、以及注册界面都单独编成一个类,每一个类都继承JFrame父类,并且在类中创建方法来来实现页面
458 0
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
|
网络协议 Java
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
|
数据可视化 Java 容器
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现
注意由于我们计步功能的步数要在重写方法中用到,所以不能将初始化语句写在方法体内,而是要写在成员位置。在其名字的时候也要做到“见名知意”,所以我们给它起名字为step
266 0
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现