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


相关推荐

  • 第三单元 用python学习微积分(二十)壳层法、圆盘法求体积 (下)

    第三单元 用python学习微积分(二十)壳层法、圆盘法求体积 (下)本文内容来自于学习麻省理工学院公开课:单变量微积分-壳层法、圆盘法求体积-网易公开课一、切片法球体积(继续建立积分的思想)​如图,红色切片部分的体积这个式子取极限,则有全部面积为二、旋转立方体(solidsofrevolution)圆盘法介绍:老师先画了一条x轴上方曲线,看着像sinx,之后出题,这个曲线绕x轴一周形成一个椭圆,可以猜想,当对这个椭圆切片,可以得到一个⚪,因为图形绕x轴旋转不会改变函数值到x轴的距离,而这个距离就是这个⚪的半径。于.

    2022年6月7日
    34
  • 快速阶乘算法

    快速阶乘算法求:n! mod p\largen!\text{mod}pn! mod p时间复杂度:Θ(nlog⁡n)\Theta(\sqrtn\logn)Θ(n​logn)模板题:P5282【模板】快速阶乘算法参考:P5282【模板】快速阶乘算法(多项式运算+拉格朗日插值+倍增)//minamoto#include<bits/stdc++.h>#defineRregister#definelllonglong#defin

    2022年7月24日
    7
  • java的输入和输出语句_c++输入输出语句

    java的输入和输出语句_c++输入输出语句输入语句:psvm输出语句:sout

    2022年9月2日
    3
  • Vue中 $attrs、$listeners 详解及使用

    Vue中 $attrs、$listeners 详解及使用1.前言多级组件嵌套需要传递数据时,通常使用的方法是通过vuex。如果仅仅是传递数据,而不做中间处理,使用vuex处理,未免有点杀鸡用牛刀。Vue2.4版本提供了另一种方法,使用v-bind=”$attrs”,将父组件中不被认为props特性绑定的属性传入子组件中,通常配合interitAttrs选项一起使用。之所以要提到这两个属性,是因为两者的出现使得组件之间跨组件的通信在不依赖vuex和事件总线的情况下变得简洁,业务清晰。首先分析以下应用场景A组件与B组件

    2022年10月18日
    1
  • java protostuff 好处_Protostuff详解

    java protostuff 好处_Protostuff详解一、Protostuff介绍Protostuff是一个开源的、基于Java语言的序列化库,它内建支持向前向后兼容(模式演进)和验证功能。Protostuff支持的序列化格式包括:protobufprotostuffjsonsmile即二进制json,从protostuff-json模块中使用。Smile数据格式是由JacksonJSON库开发团队于2010年发布的数据格式,并在Jackson1…

    2022年6月7日
    28
  • python merge函数[通俗易懂]

    python merge函数[通俗易懂]本篇详细说明merge的应用,join和concatenate的拼接方法的与之相似。pd.merge(left,right,how=’inner’,on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=(‘_x’,’_y’),copy=True,indicator=False,validate=No

    2022年5月2日
    74

发表回复

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

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