iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >java BigDecimal使用(小数点,字符串等转换)
  • 328
分享到

java BigDecimal使用(小数点,字符串等转换)

javabigdecimalarith加减乘除转换 2023-09-15 08:09:59 328人浏览 独家记忆
摘要

一、BigDecimal介绍  Java中提供了操作大数字(超过16位有效位)的类, 即 java.math.BigInteger 类和 java.math.BigDecimal 类,用于高精度计算。 float和Double只能用来做科学

一、BigDecimal介绍 

Java中提供了操作大数字(超过16位有效位)的类,

java.math.BigInteger 类和 java.math.BigDecimal 类,用于高精度计算。

float和Double只能用来做科学计算、工程计算等;在商业计算中,对数字精度要求较高(例如货币值),必须使用 BigInteger 类和 BigDecimal 类,它支持任何精度的定点数,可以用它来精确计算。

BigIntegerBigDecimal
大整数大小数

以BigDecimal为例。

BigDecimal类创建的是对象,不能使用传统的 +、-、*、/ 等算术运算符进行数学运算,而必须调用它的方法。方法的参数也必须是BigDecimal类型的对象。

二、数字转换类型问题

java中,BigDecimal十分好用。各种格式的数字只要往BigDecimal里无脑丢即可。例如:

        //字符串型        String num1 = "10.0";        BigDecimal d1 = new BigDecimal(num1);        int i1 = d1.intValue();

例如,别的系统给你传数据,发过来的都是字符串,其中有个字段是数量。但对方传过来的是"10.0",如果用 Integer.parseInt(num1),就会报错如下。

java.lang.NumberFORMatException: For input string: "10.0"

如果要处理这种情况,按照传统的方法,就得加很多校验,判断是否有小数点,等等。但如果用BigDecimal,就很舒服。

三、BigDecimal常见问题

1.new Decimal时不允许传double

new BigDecimal()的时候,不允许传入double类型的数,通常传入String类型的数(推荐这样)。

因为double类型的数传入BigDecimal无法得到精确值。

例如:

        BigDecimal b1 = new BigDecimal(0.1);    //不允许        BigDecimal b2 = new BigDecimal("0.1");  //推荐

不允许传入double类型的原因: 

        BigDecimal b10 = new BigDecimal(0.1);        BigDecimal b11 = new BigDecimal(1.1);        System.out.println(b10.add(b11).doubleValue());    //输出1.2000000000000002        BigDecimal b12 = new BigDecimal("0.1");        BigDecimal b13 = new BigDecimal("1.1");        System.out.println(b12.add(b13).doubleValue());    //输出1.2

如果值是double类型, 就需要先转换成String,再传入。也可以使用 valueOf(),用法如下

BigDecimal.valueOf(0.1)

它的源码其实就是将double转string:

    public static BigDecimal valueOf(double val) {        return new BigDecimal(Double.toString(val));    }

四、工具

public class Arith {    public static double add(double value1,double value2){        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));        return b1.add(b2).doubleValue();    }        public static double sub(double value1,double value2){        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));        return b1.subtract(b2).doubleValue();    }        public static double mul(double value1,double value2){        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));        return b1.multiply(b2).doubleValue();    }        public static double div(double value1,double value2,int scale) throws IllegalAccessException{        if(scale<0){                     throw new IllegalAccessException("精确度不能小于0");        }        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));        return b1.divide(b2, scale).doubleValue();        }}

五、保留小数位 

ROUND_DOWN --> 直接删除多余的小数位 ,(这种方式得到的绝对值不会比原数大)

ROUND_UP --> 在最后一位直接加1,

ROUND_CEILING --> 正数时与ROUND_UP一致,负数时与ROUND_DOWN一致

ROUND_FLOOR --> 正数时与Round_DOWN一致,负数时与ROUND_UP一致

ROUND_HALF_UP --> 四舍五入

ROUND_HALF_DOWN --> 五舍六入

ROUND_HALE_EVEN --> 四舍六入五看奇进偶不进(四舍六入五成双)

参考

Java中BigDecimal类型数据保留小数的精度设置

java精确除法运算(BigDecimal)

其他参考

BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)_bigdecimal 两位小数_liucw_cn的博客-CSDN博客

如何理解double精度丢失问题? - 知乎  

=======================分割线========================== 

文章到这里已经结束,以下是紫薯布丁

        //字符串型
        String num1 = "10.0";
        BigDecimal d1 = new BigDecimal(num1);
        int i1 = d1.intValue();

        BigDecimal b10 = new BigDecimal(0.1);
        BigDecimal b11 = new BigDecimal(1.1);
        System.out.println(b10.add(b11).doubleValue());    //输出1.2000000000000002

        BigDecimal b12 = new BigDecimal("0.1");
        BigDecimal b13 = new BigDecimal("1.1");
        System.out.println(b12.add(b13).doubleValue());    //输出1.2

    public static BigDecimal valueOf(double val) {
        return new BigDecimal(Double.toString(val));
    }

public class Arith {

    public static double add(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.add(b2).doubleValue();
    }
    

    public static double sub(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.subtract(b2).doubleValue();
    }
    

    public static double mul(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.multiply(b2).doubleValue();
    }
    

    public static double div(double value1,double value2,int scale) throws IllegalAccessException{
        if(scale<0){         
            throw new IllegalAccessException("精确度不能小于0");
        }
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.divide(b2, scale).doubleValue();    
    }
}

来源地址:https://blog.csdn.net/u011149152/article/details/131207531

--结束END--

本文标题: java BigDecimal使用(小数点,字符串等转换)

本文链接: https://www.lsjlt.com/news/408374.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java BigDecimal使用(小数点,字符串等转换)
    一、BigDecimal介绍  Java中提供了操作大数字(超过16位有效位)的类, 即 java.math.BigInteger 类和 java.math.BigDecimal 类,用于高精度计算。 float和Double只能用来做科学...
    99+
    2023-09-15
    java bigdecimal arith 加减乘除 转换
  • 使用Java怎么将小写字符串转换成大写字符串
    使用Java怎么将小写字符串转换成大写字符串?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. An...
    99+
    2023-06-14
  • python使用lower函数将字符串中的大小字符转换为小写
    在python中使用lower()函数将字符串中大小字符转换为小写的方法lower:lower()函数的作用是转换字符串中所有大写字符为小写。lower()函数语法:str.lower()lower()函数使用方法:str = "HELLO...
    99+
    2024-04-02
  • php怎么将字符串转换成小数
    PHP 是一门功能强大的编程语言,广泛应用于 Web 开发领域。其中一个非常常见的情况是需要将字符串转换为小数。这在进行数据处理的时候非常有用。在本文中,我们将介绍如何在 PHP 中将字符串转换为小数。首先,我们需要注意一些基础知识。在 P...
    99+
    2023-05-14
    浮点数 字符串 php
  • php如何将字符串转换成小数
    今天小编给大家分享一下php如何将字符串转换成小数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。首先,我们需要注意一些基础知...
    99+
    2023-07-05
  • python字符串怎么转换为浮点数
    要将字符串转换为浮点数,可以使用内置的float()函数。该函数将字符串作为参数,并返回对应的浮点数。以下是一个使用float()函...
    99+
    2023-10-23
    python
  • MySQL 字符串转换为数字的方法小结
    方法一:直接 加 0select '123' + 0 方法二:函数 convert语法:convert (value, type);type可以为: decima...
    99+
    2024-04-02
  • 小程序如何将字符串转换为数字
    这篇“小程序如何将字符串转换为数字”除了程序员外大部分人都不太理解,今天小编为了让大家更加理解“小程序如何将字符串转换为数字”,给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们...
    99+
    2023-06-26
  • 如何使用JavaScript中的字符串转换数字
    这篇文章给大家介绍如何使用JavaScript中的字符串转换数字,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。js 字符串转换数字方法主要有三种: 转换函数、强制类型转换、利用js变量...
    99+
    2024-04-02
  • php怎么转换字符串大小
    这篇文章主要讲解了“php怎么转换字符串大小”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php怎么转换字符串大小”吧!假设有这样的一个问题,“如何编写一个PHP脚本,实现功能:1、将字符串...
    99+
    2023-06-20
  • JavaScript如何使用+将字符串转换成数字
    这篇文章将为大家详细讲解有关JavaScript如何使用+将字符串转换成数字,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用+将字符串转换成数字这个技巧非常有用,其非常简单,可以交字符串数据转换成数字,...
    99+
    2023-06-27
  • 使用golang中的strconv.FormatFloat函数将浮点数转换为字符串
    使用golang的strconv包中的FormatFloat函数可以将浮点数转换为字符串。下面是一个具体的代码示例:package main import ( "fmt" "strconv&q...
    99+
    2023-11-18
    Golang strconv FormatFloat
  • python 中字符串大小写转换
        python中字符串的大小写转换和判断字符串大小写的函数小结: 一、pyhton字符串的大小写转换, 常用的有以下几种方法:   1、对字符串中所有字符(仅对字母有效)的大小写转换,有两个方法:   print 'just to t...
    99+
    2023-01-31
    大小写 字符串 python
  • java怎么将字符串转换为数组
    在Java中,你可以使用`toCharArray()`方法将字符串转换为字符数组。以下是一个示例:```javaString str...
    99+
    2023-09-22
    java
  • php如何把字符串转换为浮点数
    这篇文章将为大家详细讲解有关php如何把字符串转换为浮点数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP将字符串转换为浮点数的方法:1、使用强制类型转换,在要转换的string变量之前加上用括号括起...
    99+
    2023-06-06
  • 如何将字符串“210.0n”转换为浮点数
    大家好,我们又见面了啊~本文《如何将字符串“210.0n”转换为浮点数》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一...
    99+
    2024-04-05
  • java怎么将数组转换成字符串
    可以使用Arrays类的toString()方法将数组转换成字符串。 int[] arr = {1, 2, 3, 4, 5}; St...
    99+
    2024-04-02
  • 浅谈java中字符串数组、字符串、整形之间的转换
    字符串数组转字符串(只能通过for循环):String[] str = {"abc", "bcd", "def"};StringBuffer sB = new StringBuffer();for (int i = 0; i < st...
    99+
    2023-05-30
    java 数组转换成字符串 ava
  • php 字符串转换为数组
    PHP是一种流行的、面向Web应用程序的脚本语言,它可以处理各种不同类型的数据。其中,字符串和数组是PHP的两个常见数据类型。在编写PHP程序的过程中,我们常常需要将字符串转换成数组,这里介绍几种PHP中将字符串转换成数组的方法。explo...
    99+
    2023-05-22
  • php字符串转换为数值
    使用基本数据类型转换float,double或integer,可以不使用函数转换 $num = "1234.567";// 使用int类型转换echo (int)$num, "\n";// 使用flo...
    99+
    2023-09-04
    php 开发语言 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作