精确的浮点数运算包括加减乘除和四舍五入

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();

}

};

作者:溺水的鱼
来源:CSDN
原文:https://blog.csdn.net/oracle_microsoft/article/details/1574818
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,要对浮点数进行四舍五入,有几种常用的方法可以实现。首先,可以使用Math类中的round()方法。这个方法接受一个double类型的参数,并返回最接近参数的long类型值,即进行四舍五入。 另一种方法是使用BigDecimal类的setScale()方法来进行四舍五入。首先,将浮点数封装成BigDecimal对象,然后调用setScale()方法设置要保留的小数位数和舍入模式,最后使用doubleValue()方法将结果转回double类型。 还有一种方法是使用DecimalFormat类,通过设置格式化模板来实现四舍五入。可以使用setRoundingMode()方法设置舍入模式,然后使用format()方法将浮点数格式化为字符串,在使用parse()方法将字符串解析为浮点数。 总而言之,在Java中实现浮点数的四舍五入可以使用Math类的round()方法、BigDecimal类的setScale()方法以及DecimalFormat类的格式化和解析方法。具体使用哪种方法取决于具体的需求和场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java基础语法(浮点数四舍五入)](https://blog.csdn.net/weixin_44387652/article/details/120866306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [语法-Java四舍五入等详解](https://blog.csdn.net/qq_44579321/article/details/129615305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [提供精 确的浮点数运算包括加减乘除四舍五入](https://download.csdn.net/download/weixin_44244991/11454556)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值