java中float double利用BigDecimal运算
一、发现问题
float、double两种基本类型在运算的时候容易引起精度丢失。以float为例说明。
public static void main(String[] args) {
float x = 1.0f;
float y = 0.8f;
float z = x - y;
System.out.println(z);
}
结果是0.19999999
二、解决办法
利用java.math中的BigDecimal类进行操作
public static void main(String[] args) {
float x = 1.0f;
float y = 0.8f;
BigDecimal x1 = new BigDecimal(Float.toString(x));
BigDecimal x2 = new BigDecimal(Float.toString(y));
float z = x1.subtract(x2).floatValue();
System.out.println(z);
}
结果是0.2
三、注意点
注意点1
new BigDecimal(...)填写构造函数的时候,一定要使用String,而不要使用float或者double,否则同样会引起精度丢失。
注意点2
public static void main(String[] args) {
float x = 1.0f;
float y = 0.8f;
BigDecimal x1 = new BigDecimal(Float.toString(x));
BigDecimal x2 = new BigDecimal(Float.toString(y));
x1.subtract(x2);
System.out.println(x1);
}
x1仍然是1.0,因为不是引用类型。正确的是如下写法:
public static void main(String[] args) {
float x = 1.0f;
float y = 0.8f;
BigDecimal x1 = new BigDecimal(Float.toString(x));
BigDecimal x2 = new BigDecimal(Float.toString(y));
x1 = x1.subtract(x2);
System.out.println(x1);
}
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
java中float double利用BigDecimal运算相关推荐
- java中float、double和BigDecimal的精度问题(fastjson、Jackson以及实例化的方式)
java中float.double和BigDecimal的精度问题(fastjson.Jackson以及实例化的方式): 问题描述 java中如果使用float或double类型的数据初始化BigDe ...
- java怎么进行浮点数运算_【考试经验】Java中实现浮点数的精确运算
[考试经验]Java中实现浮点数的精确运算 package com.lv; import java.math.BigDecimal; public class Arith { public stati ...
- Java中关于double、Double相关问题总结
标题 java中double与Double的区别 声明double变量的时候,加d与不加d有什么区别 java中float与double的区别 java Double 详解 BigDecimal.Do ...
- Java中实现精确的浮点数运算
我们知道,在 Java 中直接对浮点数进行运算会出现精度丢失的现象,那么如何解决这一问题呢? 我们需要借助 BigDecimal 来帮助我们进行浮点数的运算!!! 一.精确的浮点数运算示例代码 //示 ...
- java 格式化 浮点数_DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等...
DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等 DecimalFormat df = new DecimalFormat(); dou ...
- Java中list如何利用遍历进行删除操作
转: Java中list如何利用遍历进行删除操作 2018年03月31日 10:23:41 Little White_007 阅读数:3874 Java三种遍历如何进行list的便利删除: 1.for ...
- 为什么Java中float类型的取值范围大于long类型
在学习Java的过程中,我遇到了一个很有意思的问题,就是为什么Java中float类型的取值范围会大于long类型. 类型名 大小/字节 取值范围 float 4(32bit) -3.4E+38 ~ ...
- Java中float和double精度
http://zhidao.baidu.com/question/344295417.html?seed=0 float与double的区别 单精度浮点数在机内占4个字节,用32位二进制描述. 双精度 ...
- java中float%int_java中short、int、long、float、double取值范围
一.分析基本数据类型的特点,最大值和最小值. 1. 基本类型:int 二进制位数:32 包装类:java.lang.Integer 最小值:Integer.MIN_VALUE= -2147483648 ...
- java中float和double为什么会转为科学记数法?
1.背景 在日常开发中有时会使用到float或double数据类型,然而在前端接收到数据时发现数据为科学记数法,此时不能满足业务显示直观的需求.为什么float和double会变成科学记数法格式呢?什 ...
最新文章
- MIT录取不再看SAT科目成绩:曾是华裔传统优势,数学等学科测验更是中国留学生强项...
- 异步FIFO芯片IDT7204、IDT7205的使用
- linux内核网络协议栈--数据包的网卡驱动收发包过程(二十五)
- 用gdb调试core dump文件
- 图像处理和计算机视觉中的经典论文
- 使用jdk压缩war包
- java inject例子_java – 手动实例化@InjectMock带注释的字段
- 数字反转(信息学奥赛一本通-T1089)
- coddenomicon工具
- 计算机组成原理作业三
- 红外测试操作步骤_红外分光测油仪操作步骤及注意事项
- js 页面 json对象转数组
- 如何删除双系统(超级详细,手把手教学)
- 机器学习如何影响系统设计:Learned Index Structures浅析
- 关于配色常见的几种搭配方式
- 项目无法启动,Disconnected from the target VM
- 微信视频号推出“创作者流量包”
- 学tlc和JAVA,#Java学习之路——第一部分总结
- 云破月来花弄影-SVG多种技术组合实现
- 从移动互联网困局漫谈人工智能的未来
热门文章
- Oracle.start with … connect by [… and] prior…order siblings by …
- manifest.json文件的 “name” “description” “version 字段解释
- 什么是开源(Open Source)?
- 几个清华和北邮学霸公众号,值得学习
- 用R将图片转为字符画
- Rstudio 1.2 新功能介绍
- 任意文件下载漏洞学习
- Linux之文件基础操作命令
- 在vue中动态添加商品SKU
- CodeForces - 729D