一:8种基本数据类型

8种基本数据类型(4整,2浮,1符,1布):

整型:byte(最小的数据类型)、short(短整型)、int(整型)、long(长整型);

浮点型:float(浮点型)、double(双精度浮点型);

字符型:char(字符型);

布尔型:boolean(布尔型)。

二: 整型中 byte、short、int、long 取值范围:记住存储位数即可

byte:一个字节有8位,去掉符号位还有7位,正数为避免进位还要减1,因此byte的取值范围为:-2^7 ~ (2^7-1),也就是 -128~127 之间。

short:short用16位存储,去掉符号位还有15位,正数为避免进位还要减1,因此short的取值范围是:-2^15 ~ (2^15-1)。

int:整型用32位存储,去掉符号位还有31位,正数为避免进位还要减1,因此整型的取值范围是 -2^31 ~ (2^31-1)。

long:长整型用64位存储,去掉符号位还有63位,正数为避免进位还要减1,因此长整型的取值范围是 -2^63 ~ (2^63-1)。

三:浮点型数据

浮点类型是指用于表示小数的数据类型。

单精度和双精度的区别:

单精度浮点型float,用32位存储,1位为符号位, 指数8位, 尾数23位,即:float的精度是23位,能精确表达23位的数,超过就被截取。

双精度浮点型double,用64位存储,1位符号位,11位指数,52位尾数,即:double的精度是52位,能精确表达52位的数,超过就被截取。

双精度类型double比单精度类型float具有更高的精度,和更大的表示范围,常常用于科学计算等高精度场合。

浮点数与小数的区别:

1)在赋值或者存储中浮点类型的精度有限,float是23位,double是52位。

2)在计算机实际处理和运算过程中,浮点数本质上是以二进制形式存在的。

3)二进制所能表示的两个相邻的浮点值之间存在一定的间隙,浮点值越大,这个间隙也会越大。如果此时对较大的浮点数进行操作时,浮点数的精度问题就会产生,甚至出现一些“不正常"的现象。

四:不能用浮点数来表示金额

1)精度丢失问题

从上面我们可以知道,float的精度是23位,double精度是63位。在存储或运算过程中,当超出精度时,超出部分会被截掉,由此就会造成误差。

对于金额而言,舍去不能表示的部分,损失也就产生了。

2)进制转换误差

从上面我们可以知道,在计算机实际处理和运算过程中,浮点数本质上是以二进制形式存在的。

而十进制的0.1在二进制下将是一个无限循环小数,这就会导致误差的出现。

如果一个小数不是2的负整数次幂,用浮点数表示必然产生浮点误差。

换言之:A进制下的有限小数,转换到B进制下极有可能是无限小数,误差也由此产生。

浮点数不精确的根本原因在于:尾数部分的位数是固定的,一旦需要表示的数字的精度高于浮点数的精度,那么必然产生误差!

解决这个问题的方法是BigDecimal的类,这个类可以表示任意精度的数字,其原理是:用字符串存储数字,转换为数组来模拟大数,实现两个数组的数学运算并将结果返回。

五:BigDecimal的使用要点

1、BigDecimal变量初始化——必须用传入String的构造方法

BigDecimal num1 = new BigDecimal(0.005);//用数值转换成大数,有误差

BigDecimal num12 = new BigDecimal("0.005");//用字符串转换成大数,无误差

因为:不是所有的浮点数都能够被精确的表示成一个double 类型值,有些浮点数值不能够被精确的表示成 double 类型值时,它会被表示成与它最接近的 double 类型的值,此时用它来初始化一个大数,会“先造成了误差,再用产生了误差的值生成大数”,也就是“将错就错”。

2、使用除法函数在divide的时候要设置各种参数,要精确的小数位数和舍入模式,其中有8种舍入模式:

1、ROUND_UP

远离零的舍入模式。

在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加1)。

注意,此舍入模式始终不会减少计算值的大小。2、ROUND_DOWN

接近零的舍入模式。

在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加1,即截短)。

注意,此舍入模式始终不会增加计算值的大小。3、ROUND_CEILING

接近正无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;

如果为负,则舍入行为与 ROUND_DOWN 相同。

注意,此舍入模式始终不会减少计算值。4、ROUND_FLOOR

接近负无穷大的舍入模式。

如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;

如果为负,则舍入行为与 ROUND_UP 相同。

注意,此舍入模式始终不会增加计算值。5、ROUND_HALF_UP

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。

如果舍弃部分>= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。

注意,这是我们大多数人在小学时就学过的舍入模式(四舍五入)。6、ROUND_HALF_DOWN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。

如果舍弃部分> 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。7、ROUND_HALF_EVEN

向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;

如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。

注意,在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。

此舍入模式也称为“银行家舍入法”,主要在美国使用。

如果前一位为奇数,则入位,否则舍去。

以下例子为保留小数点1位,那么这种舍入方式下的结果。1.15>1.2 1.25>1.2

8、ROUND_UNNECESSARY

断言请求的操作具有精确的结果,因此不需要舍入。

如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。

六:BigDecimal源码阅读

Todo。

七:Todo

大数运算的实现:https://www.cnblogs.com/hdwang/p/7642783.html

java 数字 无法表示_Java中基本数据类型、不能用浮点数表示金额相关推荐

  1. java数字取反_java中源码反码补码与取反的理解

    数字在计算机里是按照二进制来表示的. 箭头朝哪边就是朝哪边移动 补码,反码,和源码 负数原码转化为补码:符号位不变,数值位按位取反,末尾加一. 负数补码转化为原码:符号位不变,数值位按位取反,末尾加1 ...

  2. java中类型的相互转化_Java中的数据类型及相互转换方法

    本文主要讲解两个部分: 一.Java中的数据类型有哪些? 二.数字类型和字符串类型相互转换的方法? 一.Java中的数据类型有哪些: Java中的数据类型有:基本数据类型和引用数据类型: 基本数据类型 ...

  3. java异或运算结果数据类型_java中的数据类型和运算符的总结归类。

    首先学习java肯定先要了解java的发展史,以及java的特点,常见的dos命令,jdk的安装,如何开发java程序等等一下概念行的东西,这里面我都不一一说了. 今天这一章主要想总结一下java中的 ...

  4. java语言中的数据是如何定义_java中的数据类型

    java中的数据类型 java语言的数据类型包括两种,基本数据类型和引用数据类型. 定义 基本数据类型:变量名指向具体的数值. 引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值. ...

  5. Java中的基本数据类型是哪些_java中基本数据类型有哪些

    java中基本数据类型有哪些 发布时间:2021-01-16 09:19:21 来源:亿速云 阅读:98 作者:小新 小编给大家分享一下java中基本数据类型有哪些,希望大家阅读完这篇文章之后都有所收 ...

  6. java 获取int长度_Java中获取基本数据类型的长度

    Java中存在多个基本数据类型,如:int.float.double.short等.在实际应用中,我们有可能需要获取这些类型的字节数,获取数据类型的字节数可以通过直接写的方式,因为java中基本数据类 ...

  7. java byte 字面量_Java中的字面量

    在计算机科学中,字面量(literal)是用于表达源代码中一个固定值的表示法(natation).几乎所有计算机编程语言都具有对基本值的字面量表示,诸如:整数.浮点数以及字符串:而有很多也对布尔类型和 ...

  8. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  9. java包装器类_Java中的基本类型和包装类

    Java中基本数据类型与包装类型有 基本类型 包装器类型 boolean Boolean char Character int Integer byte Byte short Short long L ...

  10. java 无符号 类型_java中符号类型和无符号类型的问题分析

    一 参考博文 二 java中的无符号数和有符号数 在计算机中,可以区分正负的类型,称为有符号类型,无正负的类型,称为无符号类型. 使用二进制中的最高位表示正负 计算机中用补码表示数值:另外,用二进制的 ...

最新文章

  1. OpenCV4Android开发实录(2): 使用OpenCV3.4.1库实现人脸检测
  2. 【算法】DFS 刷题总结
  3. android sqlite用户注册代码,用户名和密码登录android登录sqlite
  4. 2021 互联网大厂新年礼盒大比拼!
  5. Leetcode 剑指 Offer 13. 机器人的运动范围 (每日一题 20210906)
  6. python中head_Python pandas.DataFrame.head函数方法的使用
  7. Windows版Qt
  8. linux集群的启动和停止,linux平台 spark standalone集群 使用 start-all,stop-all 管理集群的启动和退出...
  9. 装修时水电如何开槽?沟槽如何封堵?有哪些防止沟槽开裂的方法
  10. 将java类的泛型集合转换成json对象
  11. PDF编辑方法,怎么删除PDF文档中的空白页
  12. 卷毛机器人抢大龙_EDG卷毛宣布退役:感谢WE和EDG的培养
  13. 【Java】java.lang.Object
  14. 跨境运营培训品牌商店设计技巧
  15. 北斗导航开始提供全球服务;个人所得税 App 已上线
  16. 操作系统实验一:线程的创建与撤销
  17. 216×4说说竖式每一步的意思_52除以4 说说每一步的意思
  18. Unsupervised Monocular Depth and Ego-motion Learning with Structure and Semantics 之论文详解
  19. kotlin发音!腾讯3轮面试都问了Android事件分发,已开源
  20. 如何用纯 CSS 创作一个极品飞车 loader

热门文章

  1. 什么是shell? bash和shell有什么关系?
  2. Laravel 在哪些地方使用了 trait ?
  3. 个人作业-2016.12.2
  4. android夸项目调用
  5. 请假系统特例规则详细设计
  6. OpenCV学习资源
  7. 智能优化算法应用:基于GWO优化的最小交叉熵图像多阈值分割 - 附代码
  8. GAOT工具箱设置交叉概率和变异概率
  9. php页面怎么改造mip,WordPress MIP 改造之 a 标签替换为 mip-link 跳转链接
  10. 微服务与虚拟化技术博客总结