首页 > 编程语言 >Java BigDecimal 分析

Java BigDecimal 分析

时间:2023-08-12 18:22:18浏览次数:43  
标签:分析 Java BigDecimal 0.1 System println new Scanner

1.使用理由:

  • Double类和Float类可以对16位有效数字的数进行精确运算,但对于超过16位有效数字的数,会丢失精度。所以使用BigDecimal类来精确计算超过16位有效数字的数。

2.引入包:

  • import java.math.BigDecimal;

3.构造方法:

  • BigDecimal(E):创建一个具有参数所指定类型的对象
  • 使用样例:
    Scanner sc=new Scanner(System.in);
    BigDecimal b= new BigDecimal(0.1);
    BigDecimal c= new BigDecimal("0.1");
    BigDecimal a=sc.nextBigDecimal();
    System.out.println("输入值位:"+a);
    System.out.println("用浮点型创建:"+b);
    System.out.println("字符串类型创建:"+c);
  • 结果分析:输入值创建具有可预知性,但双精度浮点型创建具有一定的不可预知性。用String创建的值是准确的。
    输入值位:0.1
    用浮点型创建:0.1000000000000000055511151231257827021181583404541015625
    字符串类型创建:0.1

 

4.常用方法:

  • 加法:add(BigDecimal)

  • 减法:subtract(BigDecimal) 返回值:BigDecimal

  • 乘法:multiply(BigDecimal) 返回值:BigDecimal

  • 除法:divide(BigDecimal) 返回值:BigDecimal

  • 转换:toString(),intValue(),floatValue()

  • 比较:campareTo(BigDecimal) 返回值:1 表示 >,0 表示 =,-1 表示 <

5.易错提示:

  • 除法的异常提醒:Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

  • 示例代码:

    public static void main(String []args){
            Scanner sc=new Scanner(System.in);
            BigDecimal b= new BigDecimal(1);
            BigDecimal c= new BigDecimal("0.1");
            BigDecimal a= new BigDecimal(3);
            System.out.println(b.divide(a));
        }

     

  • 解决方法:设置精确小数位。

    BigDecimal java.math.BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
    BigDecimal:表示被除数
    divisor:表示除数
    scale:表示精确位数
    roundingMode:表示舍入模式
    java提供的模式:
      四舍五入:Bigdecimal.ROUND_HALF_UP
      五舍六入:Bigdecimal.ROUND_HALF_DOWN
      向上取整:Bigdecimal.ROUND_CEILING
      向下取整:Bigdecimal.ROUND_FLOOR
      等.....
  • 示例代码:

     public static void main(String []args){

            Scanner sc=new Scanner(System.in);         BigDecimal b= new BigDecimal(1);         BigDecimal c= new BigDecimal("0.1");         BigDecimal a= new BigDecimal(3);         System.out.println(b.divide(a,2,BigDecimal.ROUND_CEILING));     }

标签:分析,Java,BigDecimal,0.1,System,println,new,Scanner
From: https://www.cnblogs.com/Timefliesblogs/p/17625215.html

相关文章

  • 面向对象分析
    面向对象分析:Object-OrientedAnalysis,简称OOA。面向对象分析阶段最重要的是理解问题域的概念,其结果将影响整个工作。面向对象分析方法的一个优点是便于修改,早期阶段的修改容易提高软件的可靠性。面向对象分析的目标是完成对所解问题的分析,确定待开发软件系统要做什么,建立系统模型......
  • 前端JavaScript高频面试题
    一、js基本概念1.HTML语义化理解?得分点:语义化标签,利于页面结构化,利于没有css页面也可读,利于SEO,利于代码可读标准答案:在使用html标签构建页面时,避免大篇幅的使用无语句的标签2.说一说盒模型?得分点:标准盒模型、怪异盒模型(box-sizing:border-box;)、盒模型大小标准答案:标......
  • 【验证码逆向专栏】最新某度旋转验证码 v2 逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • java_类
    Intherealworld,you'lloftenfindmanyindividualobjectsallofthesamekind.Theremaybethousandsofotherbicyclesinexistence,allofthesamemakeandmodel.Eachbicyclewasbuiltfromthesamesetofblueprintsandthereforecontainsth......
  • java_封装
    如何实现封装将状态私有化(在状态前加private)提供获取状态的方法(public的get方法)提供修改状态的方法(public的set方法)classBicycle{//状态privateintcadence=0;//将状态私有化 //行为publicintgetCadence(){//提供获取状态的方法......
  • C C++ Java python HTML/CSS/JavaScript
    C/C++是一种底层的语言,它可以直接操作内存和硬件,运行速度很快,但是也很难学习和调试,容易出错。Java是一种面向对象的语言,它可以跨平台运行,有很多成熟的框架和库,适合做大型的企业级应用,但是也很繁琐和冗长,需要写很多代码。Python是一种高级的语言,它可以用简洁的语法来实现复杂的功能......
  • Java计算两点间的距离
    publicclassPointUtils{publicstaticvoidmain(String[]args){BigDecimalx1=newBigDecimal("0");BigDecimaly1=newBigDecimal("0");BigDecimalx2=newBigDecimal("-1");BigDecimal......
  • 复习 - Java 基本语法
    前言有两年没有怎么使用过Java了,重新复习一下基础的内容,特此记录。视频课程为B站尚硅谷宋红康java基础视频。关键字和保留字关键字定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词)特点:关键字中的所有字母都为小写保留字定义:现有的Java版本尚未使用,但以后版本......
  • How to set z-index order in Canvas using javascript All In One
    Howtosetz-indexorderinCanvasusingjavascriptAllInOne如何使用javascript在Canvas中设置z-index顺序globalCompositeOperation//全局作用域globalscopeconstcvs=document.querySelector("#canvas");constctx=canvas.ge......
  • java字符串String类的常用方法
    java字符串String类的常用方法字符串的创建:(1)定义字符串直接赋值,在字符串池中开辟空间()Stringstr1=“Hello”;//在字符串池中写入字符串"hello"Stringstr2=“Hello”;//直接引用字符串池中的"Hello"System.out.println(str1==str2);//地址相同,输出:true(2)使用new关键字调用字......