描述

为什么会有精度问题?

计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.。。。。。。无穷无尽,而精度是有限的,3.3333333x3并不等于10,经过复杂的处理后得到的十进制数据并不精确,精度越高越精确。float有8位有效数字,double有16位有效数据,float和double都是到大到一定的值自动开始使用科学计数法,并保留相关精度的有效数字,所以结果是个近似数。如果更精确的运算小数(比如金融,数学),希望结果更符合预期值应该使用Bigcimal。计算器应该也会有精度问题,也会有二进制十进制转换。

java的双精度和单精度的区别

现实问题中不但有整型数值,还有小数。Java语言也提供了针对小数的存储类型,分别是float类型和double类型。

Java语言的浮点类型有两种不同的表示形式:十进制数和科学计数法。十进制数形式,由数字和小数点组成,且必须有小数点,如0.123、12.85、26.98等;科学计数法形式,如:2.1E5、3.7e-2等。其中e或E之前必须有数字,且e或E后面的指数必须为整数。

科学计数法

一种简化计数的方法,对于位数较小的数值,科学计数法没有什么优势,但对于位数较多的数值其计数方法的优势就非常明显了。例如:光的速速是300,000,000米/秒,全世界人口数大约是6,100,000,000。类似光的速度和世界人口数这样大数值的数,读、写都很不方便,仔细观察上面的两个数值,光的速度可以写成3*108,全世界人口数可以写成6.1*109。这种计数方法就是科学计数法,用Java语言科学计数法表示光速是3E8,世界人口数大约是6.1E9。

一个较大的数值(》0)可以用下面的方式来表示:

a * 10n (1《=a《10,n为整数)

其中,a是该数值的有效位数,有效位数从左边第一个不是0的数起,到末尾数字为止,所有的数字(包括0,科学计数法不计10的n次方),称为有效数字。例如:光速是3E8,其有效数字是1位,值是3;世界人口数大约是6.1E9,其有效数字是2位,值是6.1。

n是该数值的整数部分减1的正整数。

一个较小的数值(《0)可以用下面的方式来表示:

a * 10-n (1《=a《10,n为整数)

a的取值同上面相同,n的取值为原数中左边第一个不为0的数字前面所有的0的个数(包括小数点前面的0)。

在Java语言中,浮点类型有float和double两种,分别代表单精度和双精度的数值。精度是指描述一个数值的准确程度,在数学运算中,经常会用到近似数,近似数与原数值非常相近,但又不完全符合原数值,只能说在某种程度上近似。精度与近似数相似,也是用一个与原数值非常相近的数代替原来的数值。

前面说过存储一个数值所用的字节越多,其精度越高,数值范围也越大。由此看来,精度与存储字节数密切相关,float类型的存储空间是4个字节,其表示的值范围约为10-38到1038,double类型的存储空间是8个字节,其表示的值范围约为10-308到10308,float存储数值的精度和范围要小于double存储数值的精度和范围。因此,float是单精度数值,double是双精度数值。

float变量可按如下方式声明:

double变量可按如下方式声明:

数值赋值给float变量时,数值尾部要加上小写“f”或大写“F”声明为float数值,不然编译器会给出“可能损失精度的错误”如下图所示。因为在Java语言中,带小数的数值默认为是double类型,double类型转换为float类型,自然要损失精度了。

在 Java 程序中使用浮点数和小数时,不能假定浮点计算一定产生整型或精确的结果,浮点数不是精确值,使用它们会导致舍入误差。

打开APP精彩内容

点击阅读全文

java中单精度_java单精度和双精度的区别相关推荐

  1. Java单精度与双精度区别_java单精度和双精度的区别

    为什么会有精度问题? 计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.......无穷无尽,而精 ...

  2. c语言单精度比大小,c语言单精度和双精度的区别.pdf

    c 语言单精度和双精度的区别 c 语言单精度和双精度的区别单精度是这样的格式, 1 位符号, 8 位指数, 23 位小数. 双精度是 1 位符号, 11 位指数, 52 位小数. 区别就是它所能存储的 ...

  3. 在计算机领域,半精度、单精度、双精度的定义,以及多精度计算和混合精度计算的区别。

    在计算机系统的内存中,半精度是16bit,单精度是32bit,双精度是64bit. signed bit符号位,有效数字的符号位 Exponent 阶码或者叫指数,以10^Exponent表示 Sig ...

  4. python单精度和双精度的区别_单精度、双精度和半精度浮点格式之间的区别

    我们学过数学,都知道有理数和无理数,然后在有理数中有一类叫浮点数的数字,不知道大家对这些还有没有印象? 在软件编程的时候,我们也会用到浮点数,一种既包含小数又包含整数的数据类型. 下面就来讲讲关于浮点 ...

  5. Java中单引号和双引号输出的区别

    1. java中的单引号表示字符,java中的双引号是字符串. 2.单引号引的数据一般是char类型的:双引号引的数据是String类型的. 3.java中单引号里面只能放一个字母或数字或符号:jav ...

  6. mysql单精度与双精度_单精度与双精度的区别

    展开全部 单精32313133353236313431303231363533e58685e5aeb931333365656466度与双精度的区别: 1.单精度数是指计算机表达实数近似值的一种方式.单 ...

  7. java中单精度浮点数和双精度浮点数_什么是浮点型?单精度浮点数(float)和双精度浮点数(double)介绍...

    作为一名java学习者,怎能不懂这些java基础中的基础呢?本文就带各位温顾温顾java浮点型.单精度浮点数.双精度浮点数. 浮点型首先明确java中浮点型数据类型主要有:单精度float.双精度do ...

  8. 计算机双精度值java,Java中单精度和双精度数加法结果问题

    问题引出 今天看到了一个有趣的问题,下面的Java代码打印的结果是什么? public class Test { public static void main(String[] args){ flo ...

  9. 浮点运算/半精度,单精度,双精度/浮点和定点

    目录 1.实数数的表示 1.1定点数 1.2浮点数 2.精度说明 2.1半精度FP16 3.浮点运算加法和乘法 3.1加法 3.2乘法 1.实数数的表示 参考深入理解C语言-03-有符号数,定点数,浮 ...

最新文章

  1. 构造 ---- 最小没出现过的数(逆向构造) D. Replace by MEX
  2. c语言对10求余不为7,【PTA | 基础编程题目集】7-12 两个数的简单计算器 (10分)
  3. C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法
  4. 一个自己写的PHP模板引擎
  5. js css3实现tab,div+css+js实现tab页
  6. CSS基础_Day04
  7. 【安全漏洞】DedeCMS-5.8.1 SSTI模板注入导致RCE
  8. TurboShop应用特性(2009V3.6)
  9. MYSQL安装出现could not start the service mysql error:0处理
  10. petshop详解之一:PetShop的系统架构设计
  11. Quartz.Net分布式任务管理平台(第二版)
  12. c/c++面试试题(三)
  13. express框架日志处理组件morgan
  14. html中灰色怎么写,css如何实现置灰不可点
  15. [Xamarin.Android] 儲存資料於Windows Azure (转帖)
  16. 一分钟详解机器人手眼标定MATLAB及C++实现
  17. 关于使用swiper心得
  18. 视频 |【2019】Power BI 8月产品功能更新讲解
  19. c语言计算器自动计算源代码,c语言计算器源代码
  20. Flutter 路由原理解析

热门文章

  1. polar靶场通关笔记
  2. swift之网络下载图片sdwebImage、Kingfisher、Nuke
  3. Web前端期末大作业---HTML+CSS+JS实现的翻纸牌记忆游戏
  4. SourceTree+git结合gitee实现代码管理
  5. 创建表的两种方式 [MySQL][数据库]
  6. java将cst时间格式_CST 时间格式转换成普通的时间格式yyyy-MM-dd HH:mm:ss
  7. FF新鲜事弹窗删除方法
  8. 2020西安邮电大学linux兴趣小组面试题
  9. Element tree清空树
  10. 创造与魔法241服务器系统什么时候修好,创造与魔法:最简单实用四大技巧,省下赶路时间,老玩家才知道...