首页 > 其他分享 >浮点型计算、四舍五入问题

浮点型计算、四舍五入问题

时间:2023-07-18 14:25:51浏览次数:29  
标签:四舍五入 java BigDecimal double System 浮点 计算 println out

点击查看代码
package com.bh.bugs;

import java.math.BigDecimal;
import java.math.RoundingMode;

public class Test1 {
    public static void main(String[] args) {
        System.out.println("start==========");
        // java中, double在计算的时候,精度丢失问题

        // 1, 问题再现
        // 不仅仅是java语言, 包括js, 在计算浮点类型的时候
        // 出现了精度丢失
        double d1 = 1;
        double d2 = 0.99;
//        System.out.println(d1 - d2);

        // 2, 问题分析
        // 问题很简单, 计算机底层是二进制的,任何计算都会转换成二进制
        // 然后进行计算, 计算结果会再次转换成相应的类型
        // 这个时候,精度就丢失了

        // 3, 问题解决
        // 在java中,任何关于浮点类型的计算, 一定要使用BigDecimal这个类
        // 如果你的项目是, 银行,商城,保险,金融,电信等,一定要使用BigDecmial

        //BigDecimal演示
        BigDecimal big1 = new BigDecimal("1");
        BigDecimal big2 = new BigDecimal("0.99");
        BigDecimal rst = big1.subtract(big2);
        double d3 = rst.doubleValue();
//        System.out.println(d3);

        // 保留两位小数点, 经典的四舍五入
        BigDecimal rst2 = rst.setScale(2, RoundingMode.HALF_UP);
//        System.out.println(rst2);

        BigDecimal big3 = new BigDecimal("11.545");
        // 银行家舍入方法
        // 银行家舍入
        // https://baike.baidu.com/item/%E9%93%B6%E8%A1%8C%E5%AE%B6%E8%88%8D%E5%85%A5/4781630?fr=aladdin
        BigDecimal rst3 = big3.setScale(2,RoundingMode.HALF_EVEN);
        System.out.println(rst3);

        System.out.println("end  ==========");
    }
}

标签:四舍五入,java,BigDecimal,double,System,浮点,计算,println,out
From: https://www.cnblogs.com/liangkuan/p/17562801.html

相关文章

  • python计算右移
    Python计算右移在Python中,右移是一种位运算操作,它将一个二进制数向右移动指定的位数。右移运算符由两个大于号(>>)表示。右移操作将指定的位数移动到右侧,并用符号位填充左侧的空位。右移操作可以在某些情况下非常有用,特别是在处理二进制数据和位操作时。在本文中,我们将详细介绍Pyth......
  • python计算随机口算测试
    Python计算随机口算测试在学习数学的过程中,口算是培养孩子计算能力的重要方法之一。通过口算练习,孩子们可以提高他们的计算速度和准确性。然而,每天给孩子们出一百道口算题并不是一件容易的事情,这就是为什么我们需要计算机的帮助。在本文中,我们将介绍如何使用Python编写一个随机口......
  • python计算24点游戏
    Python计算24点游戏简介24点游戏是一种通过使用给定的数字,通过运算得到24的游戏。这个游戏不仅能够锻炼我们的计算能力,还能够提高我们的逻辑思维能力。在本篇文章中,我们将使用Python编写一个程序来解决24点游戏。游戏规则24点游戏的规则很简单:给定4个数字,通过加、减、乘、除的......
  • LAXCUS:面向AI的数据计算平台
    随着人工智能技术的快速发展,数据计算需求呈现出爆炸式增长。为了满足这一需求,越来越多的企业和研究机构开始寻求更加高效、灵活和可扩展的分布式操作系统。在这个背景下,LAXCUS分布式操作系统应运而生,它是一个面向人工智能的数据计算平台,旨在为企业和研究机构提供强大的计算能力支......
  • HPET(High Precision Event Timer)是一种高精度事件计时器,它是计算机系统中的一项技术,用
    HPET(HighPrecisionEventTimer)是一种高精度事件计时器,它是计算机系统中的一项技术,用于提供更准确的时间测量和事件同步。HPET是一种硬件计时器,它具有以下特点:高精度:HPET可以以纳秒级别的精度进行时间测量,比传统计时器更准确。一致性:HPET提供一致的时间基准,可以在不同的操......
  • 浮点指令之找main函数
    环境vs2019编译选项x86(32位)debug版本float指令练习//c++源码#include<stdio.h>intmain(intargc,char*argv){ floatf=(float)argc;//将int类型转换为float printf("%f",f); argc=(int)f;//在将float类型转换为int printf("%d",argc);......
  • 【计算机网络】soap和rest简单比较整理
    https://www.bilibili.com/video/BV1ht411U7fC/?spm_id_from=333.337.search-card.all.click&vd_source=d11276664e3a69665cdbcae735af16dc一、从定义上他们就是完全不同的,soap是一个协议,restful是一种架构风格,是直接基于http协议实现的。所以直接可以看出当你想实现webservice的......
  • iOS tableView中嵌套collectionView如何动态计算高度
    tableview中嵌套collectionview的使用场景经常见,一般都是collectionview高度写死,那么如何在tableview高度自适应的情况下,collectionview的高度还能动态算准,可以通过以下方式,在cell中重写-(CGSize)systemLayoutSizeFittingSize:(CGSize)targetSizewithHorizontalFittingPriorit......
  • Kornia:可微分计算机视觉库
    Kornia 是一款基于 PyTorch 的可微分的计算机视觉库。它由一组用于解决通用计算机视觉问题的操作模块和可微分模块组成。其核心使用 PyTorch 作为主要后端,以提高效率并利用反向模式自动微分来定义和计算复杂函数的梯度。概览受现有开源库的启发,Kornia可以由包含各种可以......
  • [笔记]组成原理_计算机系统概述
    计算机系统的层次结构硬件和软件系统共同构成了一个完整的计算机系统。冯·诺依曼机的基本思想——“存储程序”其特点如下:采用存储程序的工作方式。计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备五大部件组成。指令和数据以同等地位存储在存储器中,形式上没......