首页 > 其他分享 >05_BigDecimak类

05_BigDecimak类

时间:2024-07-28 17:20:54浏览次数:11  
标签:BigDecimak BigDecimal 05 System println new public out

一、前言

public class demo01 {
    public static void main(String[] args) {
        double d1 = 1.0;
        double d2 = 0.9;
        System.out.println(d1 - d2);
	}
}

上述代码的结果为0.09999999999999998,出现这个结果是因为在java中"double"类型是浮点数,由于浮点数在计算机中的表示方法限制,某些十进制的小数在二进制中不能精确表示,因此会出现误差。例如,0.1或0.9,在二进制中需要无限的位数才能精确表示,但存储空间是有限的,因此会被截断,导致精度丢失。

因此需要精确小数运算的情况下,可以使用BigDecimal类。

二、BigDecimal类

"BigDecimal"类提供了对十进制浮点数的精确控制,但需要注意使用字符串或整数进行初始化,以避免浮点数的精度问题。

如下声明的bd1和bd2:

import java.math.BigDecimal;

public class demo01 {

    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("1.0");
        BigDecimal bd2 = new BigDecimal("0.9");
    }
}

BigDecimal类的对象实现加减乘除运算:

import java.math.BigDecimal;

public class demo01 {

    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("1.0");
        BigDecimal bd2 = new BigDecimal("0.9");
        
        //减法:subtract()方法
        BigDecimal subtract = bd1.subtract(bd2);
        System.out.println(subtract);

        //加法:add()方法
        BigDecimal add = bd1.add(bd2);
        System.out.println(add);

        //乘法:multiply()方法
        BigDecimal multiply = bd1.multiply(bd2);
        System.out.println(multiply);

        //除法:divide()方法
        BigDecimal a = new BigDecimal("1.4");
        BigDecimal b = new BigDecimal("0.5");
        BigDecimal c = new BigDecimal("0.9");
        BigDecimal result = a.subtract(b).divide(c);
        System.out.println(result);
        
        //20除以3,保留小数点后两位,采用BigDecimal.ROUND_HALF_UP(四舍五入)
        BigDecimal r = new BigDecimal("20").divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP);
        System.out.println(r);
        
    }
}

标签:BigDecimak,BigDecimal,05,System,println,new,public,out
From: https://www.cnblogs.com/wml201917205/p/18328472

相关文章

  • LeetCode1005. K 次取反后最大化的数组和
    题目链接:https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/description/题目叙述:给你一个整数数组nums和一个整数k,按以下方法修改该数组:选择某个下标i并将nums[i]替换为-nums[i]。重复这个过程恰好k次。可以多次选择同一个下标i。以这种......
  • luogu P1896 [SCOI2005] 互不侵犯 题解
    luoguP1896[SCOI2005]互不侵犯题解题目传送门思路状态压缩dp。状态压缩dp对于每一行,用一个\(n\)位二进制数表示每行的状态,则对于上下两行之间,设上行的数字为\(a\),下行的数字为\(b\),状态不合法有三种情况:\(a\operatorname{and}b\neq0\),即存在上行与下行同......
  • GYM105139C Lili Likes Polygons
    记矩形的并为\(P\),定义多边形的大小为它的顶点个数\(|P|\),其\(90\)°的顶角为凸角,\(270\)°的顶角为凹角并记凹点构成的集合为\(C\),称竖直或水平在多边形内部分割开矩形的线为割线,连接了两个凹点的割线为好割线贪心可以发现对于\(P\)的任意极小矩阵划分,所有的割线至少有一......
  • Python酷库之旅-第三方库Pandas(050)
    目录一、用法精讲181、pandas.Series.var方法181-1、语法181-2、参数181-3、功能181-4、返回值181-5、说明181-6、用法181-6-1、数据准备181-6-2、代码示例181-6-3、结果输出182、pandas.Series.kurtosis方法182-1、语法182-2、参数182-3、功能182-4、返回值1......
  • luogu P1896 [SCOI2005] 互不侵犯 题解
    luoguP1896[SCOI2005]互不侵犯题解题目传送门思路状态压缩dp。状态压缩dp对于每一行,用一个\(n\)位二进制数表示每行的状态,则对于上下两行之间,设上行的数字为\(a\),下行的数字为\(b\),状态不合法有三种情况:\(a\operatorname{and}b\neq0\),即存在上行与下行同......
  • [ARC105C] Camels and Bridge 题解
    [ARC105C]CamelsandBridge题解出自梦熊比赛后,梦熊比赛出原题了,忘周知。也许更好的阅读体验思路全排列,差分约束,二分。全排列\(n\leq8\),且要指定顺序,易想到用全排列枚举所有状态。差分约束在全排列之后,需要求得每种状态的最短距离。定义所有骆驼的编号的集合为\(S\)......
  • 每日一题- P4054
    怎么是树状数组板子,这也蓝#include<bits/stdc++.h>usingnamespacestd;intn,m,q,a[305][305];intc[305][305][105];voidadd(intx,inty,intk,intcol){ for(inti=x;i<=n;i+=i&-i) for(intj=y;j<=m;j+=j&-j) c[i][j][col]+=k;}intquery(intx,i......
  • leetcode105. 从前序与中序遍历序列构造二叉树,步骤详解附代码
    leetcode105.从前序与中序遍历序列构造二叉树给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例1:输入:preorder=[3,9,20,15,7],inorder=[9,3,15,20,7]输出:[3,9,20,nul......
  • CF605E Intergalaxy Trips 题解
    Description\(n\)个点的有向完全图。\(i\toj\)的边每天出现的概率均为\(p_{i,j}\),若\(i=j\),有\(p_{i,j}=1\)。每天可以选择一条存在的出边走过去或停留在原地不动。求最优策略下从\(1\)到\(n\)的期望天数。\(n\le10^3\)。Solution设\(f_i\)表示\(i\)......
  • (超详细)备赛笔记2024年全国职业院校(中职组)技能大赛(ZZ052大数据应用与服务)第二套试题
    2024年职业院校中职组ZZ052大数据应用与服务赛项赛题第02套【子任务一:基础环境准备】模块一:平台搭建与运维(一)任务一:大数据平台搭建1.子任务一:基础环境准备(1)对三台环境更新主机名,配置hosts文件,以node01作为时钟源并进行时间同步;#分别在不同主机上面执......