Java四舍五入保留小数点后几位

Java四舍五入保留小数点后几位(double)+Math.round返回double类型//案例:四舍五入保留小数点后1位doubled1=123.456;doubled2=654.321;doublev1=(double)Math.round(d1*10)/10;doublev2=(double)Math.round(d2*10)/10;System.out…

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

  1. (double) + Math.round 返回double类型

    // 案例:四舍五入保留小数点后1位
    double d1 = 123.456;
    double d2 = 654.321;
    double v1 = (double) Math.round(d1 * 10) / 10;
    double v2 = (double) Math.round(d2 * 10) / 10;
    System.out.println(v1); // 123.5
    System.out.println(v2); // 654.3
    
  2. DecimalFormat 返回String类型,你可以设置四舍五入的模式,详见java.math.RoundingMode,提示:负数四舍五入时有不同的模式

    double d1 = 123.456;
    double d2 = 654.321;
    DecimalFormat decimalFormat = new DecimalFormat("#.#");
    decimalFormat.setRoundingMode(RoundingMode.UP);
    String format1 = decimalFormat.format(d1);
    System.out.println(format1);
    String format2 = decimalFormat.format(d2);
    System.out.println(format2);
    
  3. BigDecimal 返回double类型,可以设置四舍五入的模式,提示:负数四舍五入时有不同的模式。注意:BigDecimal#setScale方法返回一个新的BigDecimal对象!

    BigDecimal bigDecimal1 = new BigDecimal(d1);
    BigDecimal bigDecimal2 = new BigDecimal(d2);
    BigDecimal vbd1 = bigDecimal1.setScale(1, BigDecimal.ROUND_HALF_UP);
    BigDecimal vbd2 = bigDecimal2.setScale(1, BigDecimal.ROUND_HALF_UP);
    System.out.println(vbd1.doubleValue());
    System.out.println(vbd2.doubleValue());
    

Java支持七种舍入方式:

  1. ROUND_UP:远离零方向舍入。向远离0的方向舍入,也就是说,向绝对值最大的方向舍入,只要舍弃位非0即进位。
  2. ROUND_DOWN:趋向零方向舍入。向0方向靠拢,也就是说,向绝对值最小的方向输入,注意:所有的位都舍弃,不存在进位情况。
  3. ROUND_CEILING:向正无穷方向舍入。向正最大方向靠拢,如果是正数,舍入行为类似于ROUND_UP;如果为负数,则舍入行为类似于ROUND_DOWN。注意:Math.round方法使用的即为此模式。
  4. ROUND_FLOOR:向负无穷方向舍入。向负无穷方向靠拢,如果是正数,则舍入行为类似于 ROUND_DOWN;如果是负数,则舍入行为类似于ROUND_UP。
  5. HALF_UP:最近数字舍入(5进)。这就是我们最最经典的四舍五入模式。
  6. HALF_DOWN:最近数字舍入(5舍)。在四舍五入中,5是进位的,而在HALF_DOWN中却是舍弃不进位。
  7. HALF_EVEN:银行家算法。
    在普通的项目中舍入模式不会有太多影响,可以直接使用Math.round方法,但在大量与货币数字交互的项目中,一定要选择好近似的计算模式,尽量减少因算法不同而造成的损失。

银行家算法:
四舍:舍弃的数值:0.000、0.001、0.002、0.003、0.004,因为是舍弃的,对银行家来说,就不用付款给储户了,那每舍弃一个数字就会赚取相应的金额:0.000、0.001、0.002、0.003、0.004。
五入:进位的数值:0.005、0.006、0.007、0.008、0.009,因为是进位,对银行家来说,每进一位就会多付款给储户,也就是亏损了,那亏损部分就是其对应的10进制补数:0.005、0.004、0.003、0.002、0.001。
因为舍弃和进位的数字是在0到9之间均匀分布的,所以对于银行家来说,每10笔存款的利息因采用四舍五入而获得的盈利是:

在这里插入图片描述
银行家舍入(Banker’s Round)的近似算法,其规则如下:

  1. 舍去位的数值小于5时,直接舍去;
  2. 舍去位的数值大于等于6时,进位后舍去;
  3. 当舍去位的数值等于5时,分两种情况:5后面还有其他数字(非0),则进位后舍去;若5后面是0(即5是最后一个数字),则根据5前一位数的奇偶性来判断是否需要进位,奇数进位,偶数舍去。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 怎样查看MySql数据库物理文件存放位置

    怎样查看MySql数据库物理文件存放位置

    2022年2月9日
    53
  • Java队列实现

    Java队列实现一、队列简单介绍队列是一种常用的数据结构之一,与之前的栈类似,不过队列是“先进先出”。队列有队头(front)和队尾(rear),数据从队尾进入队列,从队头出队列,队头(front)指向队列的第一个数据,队尾(rear)指向队列中的最后一个数据。二、队列实现队列有很多种,这里只是介绍最基本的实现,采用链式存储,也就是链式队列,与之前的链表存储形式一样,通过结点对象描述一个数据,结点对象包含具体数

    2022年7月14日
    11
  • mnist手写数字识别代码(knn手写数字识别)

    MNIST手写数字识别模型建立与优化本篇的主要内容有:TensorFlow处理MNIST数据集的基本操作建立一个基础的识别模型介绍SoftmaxSoftmaxSoftmax回归以及交叉熵等MNIST是一个很有名的手写数字识别数据集(基本可以算是“HelloWorld”级别的了吧),我们要了解的情况是,对于每张图片,存储的方式是一个28*28的矩阵,但是我们在导入数据进…

    2022年4月18日
    52
  • java jwt 单点登录_JWT实现单点登录

    java jwt 单点登录_JWT实现单点登录importcom.atguigu.commonutils.JwtUtils;importcom.atguigu.commonutils.MD5;importcom.atguigu.eduservice.entity.UcenterMember;importcom.atguigu.eduservice.entity.vo.RegisterVo;importcom.atguigu.edus…

    2022年5月21日
    33
  • 存储单位_目前国产手机有1t的内存吗

    存储单位_目前国产手机有1t的内存吗1.bit(位)一位二进制数,即0或1最小的存储单位2.B/Byte(字节)8位存储信息的基本单位,一个字母一个字节,一个存储单位一个字节int四个字节,3.字计算机进行数据处理

    2022年8月5日
    1
  • SOP是什么?SOP的作用是什么?如何编写SOP?

    SOP是什么?SOP的作用是什么?如何编写SOP?SOP是由StandardOperationProcedure这三个英文单词的首个字母组合而成。也就是以统一化的标准将操作流程的步骤和要求罗列出来,用于指导和规范日常工作。SOP的核心,就是把特定流程的关键问题细化及量化。SOP是以文件的方式归纳总结操作人员在实际生产过程中的具体操作步骤和应当要注意的事项,它是车间现场操作人员的作业指导模板,也是质量检验人员用于检测指导工作的依据。SOP的作用:1、把企业长期累积的经验技术记录归纳,汇总成简单易懂的标准化文件,即使出现操作人员变动也不会使已有的技

    2022年5月9日
    56

发表回复

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

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