首页 > 编程语言 >Java项目开发中使用BigDecimal实例及注意事项补充

Java项目开发中使用BigDecimal实例及注意事项补充

时间:2024-07-30 22:40:05浏览次数:8  
标签:Java BigDecimal val System 注意事项 println new out

去年写过一篇博客记录了日常项目开发中使用BigDecimal遇到的问题和注意事项:
Java项目日常开发中使用BigDecimal常见问题总结
今年在项目开发中遇到了几个实例,这里补充记录下。

  1. BigDecimal初始化时入参使用String类型,如果不是数字会抛异常NumberFormatException
// java.lang.NumberFormatException
BigDecimal val = new BigDecimal("a");
System.out.println(val);

注:new BigDecimal("13.14 ");如果前后有空格同样会报错,在之前的博客有记录。

  1. BigDecimal初始化时入参使用Double类型,如果值为null会抛异常NullPointerException
// java.lang.NullPointerException
Double d = null;
BigDecimal val = new BigDecimal(d);// unboxing
System.out.println(val);

注:因为BigDecimal(double val)构造函数,这里Double会进行拆箱,转换为double,因此出现NPE.

  1. BigDecimal初始化时入参使用double类型,如果值为NaN会抛异常NumberFormatException
// java.lang.NumberFormatException
double d = 0 / 0d; // NaN
BigDecimal val = new BigDecimal(d);
System.out.println(val);

注:这里入参就是double类型,不会像实例2那样拆箱,但这里double的值非法,NaN表示not a number
通过BigDecimal构造函数,内部解析会失败,最终抛异常NumberFormatException

完整代码如下:

import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;

/**
 * @author cdfive
 */
public class BigDecimalTest4 {

    public static void main(String[] args) {

        case1();

        System.out.println(StringUtils.center("分隔线", 50, "-"));

        case2();

        System.out.println(StringUtils.center("分隔线", 50, "-"));

        case3();
    }

    private static void case1() {
        // java.lang.NumberFormatException
        try {
            BigDecimal val = new BigDecimal("a");
            System.out.println(val);
        } catch (Exception e) {
            System.out.println(e.getClass().getName());
        }
    }
    private static void case2() {
        // java.lang.NullPointerException
        try {
            Double d = null;// unboxing
            BigDecimal val = new BigDecimal(d);
            System.out.println(val);
        } catch (Exception e) {
            System.out.println(e.getClass().getName());
        }
    }

    private static void case3() {
        // java.lang.NumberFormatException
        try {
            double d = 0 / 0d; // NaN
            BigDecimal val = new BigDecimal(d);
            System.out.println(val);
        } catch (Exception e) {
            System.out.println(e.getClass().getName());
        }
    }
}

标签:Java,BigDecimal,val,System,注意事项,println,new,out
From: https://www.cnblogs.com/cdfive2018/p/18332392

相关文章

  • 小白必看的java完整下载攻略!(在Typora中有图片参考)
    Java下载在浏览器上搜索JDK(2024年最新版是22,本人下载的是21)点击官网下载,会跳到Oracle官网,需要注册账号才可下载根据自己的电脑型号选择下载(本人下载的是64的)正常情况下下载的JDK版本后缀是exeJava安装的后续操作作为一个程序员坚持不懈才能成就大事。完成Java安装后事情还......
  • JavaScript 对象
    1.JavaScript对象把一个单一值(porsche)赋给名为car的变量varcar="porsche";对象也是变量。但是对象包含很多值。这段代码把多个值(porsche,911,white)赋给名为car的变量varcar={type:"porsche",model:"911",color:"white"};值以名称:值对的方式来书写(名称和......
  • Java基础知识
    @目录一、第一个java程序二、Java中标识符的使用三、Java中的数据类型1.基本数据类型2.引用数据类型3.String类型变量的使用(字符串类型)四、Java中的运算符1.算数运算符2.赋值运算符3.比较运算符4.逻辑运算符5.位运算符6.三元运算符一、第一个java程序publicclasshello{......
  • 计算机毕业设计选题推荐-零食批发商仓库管理系统-Java/Python项目实战
    ✨作者主页:IT研究室✨个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。☑文末获取源码☑精彩专栏推荐⬇⬇⬇Java项目Python项目安卓项目微信小程序项目......
  • 2024年华为OD机试真题-结队编程 -(C++/Java/python)-OD统一考试(C卷D卷)
     2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】题目描述某部门计划通过结队编程来进行项目开发,已知该部门有N名员工,每个员工有独一无二的职级,每三个员工形成一个小组进行结队编程,结队分组规则如下:从部门中选出序号分别为i、j、k的3名员工,他们的职级分贝为......
  • Java基础知识分享(二)
    写在前面昨天给了十题编程题,如果你能有思路很快速地完成它,说明你的Java数据类型、运算符、选择语句、循环语句部分的基础知识很好,接下来就来看看后面的方法、数组以及他们在JVM中的内存划分知识吧!方法语句定义格式:修饰符返回值类型方法名(参数类型参数名,参数类型参数名,......
  • [Java基础]值传递
    Java值传递详解开始之前,我们先来搞懂下面这两个概念:形参&实参值传递&引用传递形参&实参方法的定义可能会用到参数(有参的方法),参数在程序语言中分为:实参(实际参数,Arguments):用于传递给函数/方法的参数,必须有确定的值。形参(形式参数,Parameters):用于定义函数/方法,接收实参,不需要......
  • java基础题(附答案)(第二天的知识点预热)
    一、填空题Java语言规定标识符由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。Java中整型变量有byte、short、int和long四种,不同类型的整数变量在内存中分配的字节数不同,数值范围也不同。对于int型变量,内存分配4个字节。在Java中浮点型变量有fl......
  • java牛马之路22-Listener监听器
    监听器概念监听器用于监听web应用中某些对象信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等。创......
  • Java基础知识
    Java基础知识一、第一个java程序二、Java中标识符的使用三、Java中的数据类型1.基本数据类型2.引用数据类型3.String类型变量的使用(字符串类型)四、Java中的运算符1.算数运算符2.赋值运算符**3.比较运算符****4.逻辑运算符****5.位运算符****6.三元运算符**一、第一......