Java 数值类型以及计算
前段时候写了一个对外提供的接口,其中有一个数值校验的计算。在测试的过程中发现5.6-1.6 != 4,究其原因是double类型的数值有精度丢失的现象,看来还是基础知识不牢固,在网上找了些文档从头看了下Java基本数值类型,好多东西已经忘记了,什么二进制补码、原码、反码统统忘记了,回想起大学数学.....(越扯越远了)。
基本数据类型和浮点数精度问题引用俩篇现有的博客就不在重复造轮子了,精度问题好像扯得比较多,说实话没看懂,主要写写如何处理精度问题吧。
Java的基本数据类型
引用:http://www.cnblogs.com/1130136248wlxk/articles/5105524.html
Java double 精度问题
引用:https://www.iovi.com/post/2014-07-07-talk-about-double-in-java.html
看了一遍有些没有看懂,但是得出的结论是:double之所以产生精度的丢失,最根本的原因是用于表示小数的二进制位数不够,然后做round,造成丢失。
既然Java的浮点数运算为产生精度问题,那么对于需要精确运算结果的系统如何处理呢?
Effective Java 第48条 如果需要精确的答案,请避免使用flaot和double,flaot和double 主要是为科学计算和工程计算而设计的,如果需要精确计算请使用BigDecimal,不过BigDecimal的性能相比double会下降很多,所以根据实际情况选择合适自己的方式。
//定义数字格式化类
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);
nf.setMaximumFractionDigits(2);
double ysx = 5.6; 6 double jcx = 1.6;
//将double类型转换为BigDecimal
//必须先将double转换为string
BigDecimal ysx = new BigDecimal(nf.format(ysx);
BigDecimal jcx = new BigDecimal(nf.format(jcx));
//执行计算
BigDecimal ysc= jcx.subtract(ycx)
//比较大小14 //compareTo 只比较数值大小
//equals 比较数值大小以及精度
if(ysc.compareTo(jcx) == 0)
Java 数值类型以及计算的更多相关文章
- Java数值类型之间转换
Java之间的数值转换如图所示,实心箭头代表无数据丢失,虚线箭头代表可能丢失 例如:123456789是一个大的整数,包含的位数比float类型能够表达的位数多,但这个数转换为float类型时,将会得 ...
- PHP中字符串类型与数值类型混合计算
字符串转数值的规则 当一个字符串被当作一个数值来取值,其结果和类型如下: 如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串 ...
- Java数值避免浮点型计算丢失精度问题
问题描述及方案 假设我们在做电商项目,在进行计算时这个丢失精度在产品价格计算就会出现问题,很有可能造成我们手里有9.99元然后后面会有一堆9,但是呢这些钱无法购买一个10元的商品. 在某些编程语言中有 ...
- java数值类型之间的转换
说明:图中6个实心箭头代表转换无信息丢失,3个虚线箭头表示可能有精度损失的转换.
- Java枚举类型的使用,数值的二进制表示
一.Java枚举类型的使用 首先请看这段代码: package java上课; public class EnumTest { public static void main(String[] arg ...
- java浮点类型计算
java浮点类型需要采用java.math.*这个工具包,这样的计算结果才是我们想要的.呵呵 import java.math.BigDecimal; import java.text.NumberF ...
- Java中初级数值类型的大小, volatile和包装类wrapped type的比较
Java中的初级数值类型 Java是静态类型语言, 所有的变量必须先声明再使用. 其初级类型一共8种: boolean: 数据只包含1bit信息, 但是占空间为8-bit, 默认值为false byt ...
- java double类型保留两位小数4种方法【转】
4种方法,都是四舍五入,例: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.NumberF ...
- Java基础类型与其二进制表示
Java中的基础类型有:byte.short.int.long.float.double.char和boolean. 它们可被分为四种类型,整型.浮点型.char型和boolean型. 整型:byte ...
随机推荐
- shc加密shell脚本
下载地址:http://www.datsi.fi.upm.es/~frosal/sources/ 安装 .tgz cd shc- mkdir -p /usr/local/man/man1 这步是必须的 ...
- HTML <div> 和<span>
HTML <div> 和<span> HTML 可以通过 <div> 和 <span>将元素组合起来. HTML 区块元素 大多数 HTML 元素被定义 ...
- Servlet3.1规范和JSP2.3规范
JSR 340: Java Servlet 3.1 Specification https://jcp.org/en/jsr/detail?id=340 http://files.cnblogs.co ...
- 关于MVC结构
简单的记录,只是想记录一下现在对MVC的理解. MVC,即模型(MODEL),视图(VIEW),控制器(CONTROLLER) 模型是数据模型 视图是图形界面 控制器是在两个之间的控制部分,用来将数据 ...
- Hadoop学习笔记-001-CentOS_6.5_64_连接外网设置
参考:http://blog.csdn.net/u010270403/article/details/51444677 虚拟机中共五个centos系统,每个系统有两个用户root和hadoop:cdh ...
- 字符集编码与Python(二)Unicode与utf-8
Python中的Unicode和utf-8 上一篇提过了字符集的历史其中简单的讲解了Unicode与utf-8的关系,简单的总结一下: utf-8和utf-16 .utf-32是一类,实现的功能是 ...
- CSS的兼容性与BUG处理
骨灰级清除浮动 .clearfix:after { content: "."; display: block; height: 0; clear: both; visibility ...
- java 文件操作 写入和读取(小结一)
参考了这篇博客并优化,谢谢:http://blog.sina.com.cn/s/blog_99201d890101b4le.html 功能: 实现通过两个类完成先写入文件,再读取数据计算显示 pac ...
- java作业—3
动手动脑: 一.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 方法1(数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例:(int)(1+Math.r ...
- asp.net core mvc剖析:路由
在mvc框架中,任何一个动作请求都会被映射到具体控制器中的方法上,那框架是如何完成这样一个过程的,现在我们就来简单分析下流程. 我们紧跟上面的主题,任何一个请求都会交给处理管道进行处理,那mvc处理的 ...