前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >bigdecimal除法运算保留两位小数_bigdecimal保留两位小数显示00

bigdecimal除法运算保留两位小数_bigdecimal保留两位小数显示00

作者头像
全栈程序员站长
发布2022-11-09 14:12:02
发布2022-11-09 14:12:02
4K00
代码可运行
举报
文章被收录于专栏:全栈程序员必看
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

问题: 将两个long类型的数相除后转换为BigDecimal类型并保留两位小数。

思路: 1.先将long转换为double类型再相除 2.相除之后再转换为BigDecimal类型 3.最后是设置小数位数,并设置两位小数后面的数的处置方式。

代码:

代码语言:javascript
代码运行次数:0
复制
long num1 = 5L;
long num2 = 20L;
BigDecimal num= BigDecimal.valueOf((double) num1/ num2).setScale(2, BigDecimal.ROUND_HALF_UP);

拓展: 1.为什么需要将long转换为double类型再相除?

答:如果直接用两个long类型的数相除,最后得到的结果是0.00,会丢失精度,得不到小数点后面准确的数。因为两个long类型的数相除会自动取整,所以需要转换为double类型再相除。

2.怎么将double类型的数转换为BigDecimal类型? 答: 1.使用BigDecimal的valueOf(double val)方法创建对象。

代码语言:javascript
代码运行次数:0
复制
BigDecimal.valueOf(double val);

源码:

代码语言:javascript
代码运行次数:0
复制
public static BigDecimal valueOf(double val) { 
   
        // Reminder: a zero double returns '0.0', so we cannot fastpath
        // to use the constant ZERO. This might be important enough to
        // justify a factory approach, a cache, or a few private
        // constants, later.
        return new BigDecimal(Double.toString(val));
    }
  1. 使用BigDecimal(String val)的构造方法创建对象
代码语言:javascript
代码运行次数:0
复制
long num1 = 5L;
long num2 = 20L;
BigDecimal bigDecimal = new BigDecimal(Double.toString((double) num1/ num2)).setScale(2, BigDecimal.ROUND_HALF_UP);

注意:

不能直接使用参数为float或double的BigDecimal创建对象,因为那样会丢失精度导致数值不准确可能得不到预期的结果,应该先转换为String再创建对象,可以看到valueOf(double val)这个方法的实现也是先转换为String再创建BigDecimal对象。

例如:四舍五入后得到的结果是0.74而不是0.75。

代码语言:javascript
代码运行次数:0
复制
 System.out.println(new BigDecimal(0.745).setScale(2, BigDecimal.ROUND_HALF_UP));

3.BigDecimal setScale(int newScale, int roundingMode) newScale:保留的小数位数 roundingMode:取整方式。

参考: 1.BigDecimal使用ROUND_HALF_UP进行四舍五入

2.BigDecimal中的取整模式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/190386.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月23日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档