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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • threadlocal底层实现_hashset底层实现原理

    threadlocal底层实现_hashset底层实现原理ThreadLocal作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂性。package com.mupack;public class App{ private String content; public void setContent(String content) { this.content = content; } public Stri

    2022年8月8日
    0
  • 计算机网络实验四访问控制列表NAT应用

    计算机网络实验四访问控制列表NAT应用计算机网络实验四访问控制列表NAT应用

    2022年7月23日
    9
  • 红帽linux忘记密码的时候

    红帽linux忘记密码的时候

    2021年8月28日
    75
  • Qt中的角度转弧度[通俗易懂]

    Qt中的角度转弧度[通俗易懂]在Qt中,qAsin(),qAtan2()等三角函数的返回值是弧度而不是角度,因此要将弧度转化为角度。弧度=角度*Pi/180以qAtan()函数为例qrealqAtan(qrealv)Returnsthearctangentofvasanangleinradians.Arctangentistheinverseoperationoftangent….

    2022年6月16日
    83
  • linux的vim撤销命令,[Linux] Vim 撤销 回退 操作「建议收藏」

    linux的vim撤销命令,[Linux] Vim 撤销 回退 操作「建议收藏」在vi中按u可以撤销一次操作u撤销上一步的操作Ctrl+r恢复上一步被撤销的操作注意:如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了。重做如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销一个撤销。要看执行的例子,输入CTRL-R两次。字符A和它后面的空格就出现了:youngintelligentturtle有一个特殊…

    2022年6月16日
    181
  • Word域的应用和详解

    Word域的应用和详解本文主要内容:域基础通用域开关表格操作符和函数编号域  ■第一章域基础一、域的作用  微软的文字处理软件MicrosoftWord系列,其方便和自动化程度是其他任何文字处理软件所望尘莫及的。究其原因,其一,微软有强大的软件开发技术人员队

    2022年6月12日
    42

发表回复

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

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