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

bigdecimal除法运算保留两位小数_bigdecimal保留两位小数显示00**问题:**将两个long类型的数相除后转换为BigDecimal类型并保留两位小数。思路:1.先将long转换为double类型再相除2.相除之后再转换为BigDecimal类型3.最后是设置小数位数,并设置两位小数后面的数的处置方式。代码:longnum1=5L;longnum2=20L;BigDecimalnum=BigDecimal.valueOf((double)num1/num2).setScale(2,BigDecimal.ROUND_HALF_UP);

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

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

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

代码:

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)方法创建对象。

BigDecimal.valueOf(double val);

源码:

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)的构造方法创建对象
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。

 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.net/190386.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 事务隔离级别与锁的对应关系_X与XS区别

    事务隔离级别与锁的对应关系_X与XS区别隔离级别org.springframework.transaction.annotation.Isolationpublic enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8);}DEFAULT :这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是: READ_CO..

    2022年8月9日
    3
  • 浏览器被hao.360.cn劫持怎么办

    浏览器被hao.360.cn劫持怎么办特么的现在互联网太没节操了,一大早发现我的浏览器被hao.360.cn劫持了,弄了好久都没弄好,后来一想可能是因为qvod的原因,这可是哥当年看片的神器啊……废话不说:1,进入:C:\ProgramData\QvodPlayer\QvodWebBase2,点开1.0.0.53(或者其它)文件夹3,直接删除里面的文件是删除不了的。更改QvodWebBase64.dll后缀名为QvodWebB…

    2022年7月14日
    18
  • pycharm国外默认镜像源_gnuradio国内镜像源

    pycharm国外默认镜像源_gnuradio国内镜像源阿里云http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/豆瓣(douban)http://pypi.douban.com/simple/清华大学https://pypi.tuna.tsinghua.edu.cn/simple/中国科学技术大学http://pypi.mirrors.ustc.edu.cn/simple/…

    2022年8月28日
    3
  • 一年多的前后(2019vs2020)对比「建议收藏」

    一年多的前后(2019vs2020)对比「建议收藏」不知不觉,又到了这个躁动不安的季节,躁动的是应届毕业生毕业以及高考。关于对青春的情愫,通常在这种时刻都会有各种各样的故事,当然了,我并不是一个会讲故事的人,所以通常情况下,就采用这种总结性的方式写文字

    2022年8月6日
    4
  • mysql 设置主键命令_MySQL常用命令

    mysql 设置主键命令_MySQL常用命令1、修改MySQL密码方法一:usemysql;updateusersetpassword=PASSWORD(“123456”)whereuser=‘root’;flushprivileges;忘记密码:sed-ri’3dskip-grant-tables’/etc/my.cnfsystemctlrestartmariadbusemysql;updateuse…

    2022年6月20日
    28
  • C语言实现五子棋小游戏

    C语言实现五子棋小游戏三子棋,五子棋,无论多少子棋,其原理都是一样的。下面我用五子棋为例讲解用C语言多文件编程实现五子棋。设计电脑和玩家两个作为下棋的两方,用键盘输入作为玩家的游戏操作。1.效果图:程序总的构架:我们只要输入坐标就可以和电脑对弈了。电脑的棋子用‘0’表示,玩家的棋子用‘x’表示。2.打印菜单可以根据自己的爱好设计各种风格的…

    2022年5月12日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号