Java 数据类型转换的骚操作和神奇现象
问:银行用什么数据类型来表示余额?float还是double?
都不是!!下面说明为什么都不可以呢?
public static void main(String[] args) {
//浮点数他都是近似的,你看着一样的东西,他看来就不一样
float f_a = 0.1f;
double d_a = 0.1;
System.out.println("两个0.1的比较:"+(f_a==d_a));
float f_b =2213231213f;
float f_c =f_b + 1;
System.out.println("很大的float+1:"+(f_b == f_c));
double d_b =2213231213f;
double d_c =d_b + 1;
System.out.println("很大的double+1:"+(d_b == d_c));
}

float+1竟然还等于float,那也就是说 :王健林=马云
浮点数存在精度损失,不能应用在金融领域不允许舍去的环境下。
浮点数损失进度的原理:https://www.iteye.com/blog/xinklabi-2344952
所以金融领域用的是BigDecimal。
解决这个问题的方法是BigDecimal的类,这个类可以表示任意精度的数字
其原理是:用字符串存储数字,将其转换为数组来模拟大数,实现两个数组的数学运算,并将结果返回。
BigDecimal num12 = new BigDecimal("0.005");//用字符串转换成大数,无误差
强制类型转换 :以左为尊,左大右小,右边要服从左边自动转换
自动类型转化 :以左为尊,左小右大,右边要服从左边强制转换,高转换低可能会存在内存溢出,或者精度丢失。
//从低到高 byte->char,short->int->long->float->double
byte b = 12;
int i = b;//左边大右边自动转换成左边的int
int a = 1000;
b = a;//左边小,右边直接这样转换会报错
b =(byte) a;强制类型转换,这样就可以了,但是这样有可能会溢出
JDK7新特性,数字间可以用下划线,方便人们阅读:
int a = 1_0000_0000;//还是和正常的数字一样
int b = 200;
long c = a*b;//这样会内存溢出,因为a*b的结果还是个long类型。
long d = (long)a*b;//long*int的结果还是long
System.out.println(a);


Java 数据类型转换的骚操作和神奇现象的更多相关文章
- Java数据类型转换浅析
Java数据类型转换分为两种:自动类型转换和强制类型转换. 数据类型转换的关键是数据类型相应的表数范围大小 1.自动类型转换: 概念:小范围数据类型会自动转化成大范围数据类型 实例: int a=10 ...
- Java数据类型转换1
1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- LoadRunner脚本编写(6)— 数据类型转换和字符串操作
LoadRunner脚本编写(6)— 数据类型转换和字符串操作 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现在数据类型转化方面比较困难.下面介绍这方面的知识. 1. 相似函 ...
- 第24章 Java 数据类型转换
每日一句 井底点灯深烛伊,共郎长行莫围棋. 每日一句 What we call "failure" is not falling down, but the staying dow ...
- java数据类型转换那点事
public class kkk { /** * 先看看eclipse对于数值型转换会有哪些报错,但是有一点必须明确,eclipse不报错的,不一定就是说这种思维逻辑是对的 * 可以直接将代码复制过去 ...
- Java数据类型转换(自动转换和强制转换)
数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...
- 2、java数据类型转换
当数据类型不一样时,将会发生数据类型转换. 1.自动类型转换(隐式) 1. 特点:代码不需要进行特殊处理,自动完成. 2. 规则:数据范围从小到大. System.out.println(1024); ...
- Java数据类型转换问题
基本数据类型 整数型 byte --- 字节型 --- 1个字节 --- -27~27-1 -> -128~127 byte b1 = 25; byte b2 = 127; short --- ...
- Java中内部类的骚操作
10.1 如何定义内部类 如代码10.1-1 所示 public class Parcel1 { public class Contents{ private int value = 0; pu ...
随机推荐
- jvm 性能调优工具之 jps 命令详解
JPS名称:jps - Java Virtual Machine Process Status Tool命令用法:jps [options] [hostid] options:命令选项,用来对输出格式 ...
- Bisecting GlcNAc is a general suppressor of terminal modification of N-glycan (解读人:王茹凯)
文献名:Bisecting GlcNAc is a general suppressor of terminal modification of N-glycan(平分GlcNAc是N-聚糖末端修饰的 ...
- tarjan算法强连通分量的正确性解释+错误更新方法的解释!!!+hdu1269
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1269 以下内容为原创,转载请声明. 强连通分量SCC(Strongly Connected Compo ...
- 动态规划-区间dp-Palindrome Removal
2019-11-09 10:31:09 问题描述: 问题求解: n = 100,典型的O(n ^ 3)的动规问题.一般来说这种O(n ^ 3)的问题可以考虑使用区间dp来解决. 区间dp是典型的三层结 ...
- 浏览器与DNS解析过程
浏览器解析 1.地址栏输入地址后,浏览器检查自身DNS缓存 地址栏输入chrome://net-internals/#dns 查看. 2.浏览器缓存中未找到,那么Chrome会搜索操作系统自身的DNS ...
- 使用PyTorch建立图像分类模型
概述 在PyTorch中构建自己的卷积神经网络(CNN)的实践教程 我们将研究一个图像分类问题--CNN的一个经典和广泛使用的应用 我们将以实用的格式介绍深度学习概念 介绍 我被神经网络的力量和能力所 ...
- HDU - 3791 建立二叉搜索树
题意: 给定一个序列,下面又有n个序列,判断这个序列和其他序列是否为同一个二叉树(同一序列数字各不相同) 思路: 首先讲将一个序列建立成二叉搜索树,然后将其他序列也建立二叉搜索树,两个树进行前序遍历, ...
- Oracle 10g客户端的安装和配置
1.双击Oracle11g_database安装目录下的Setup.exe. 2.选择“基本安装”,设置“安装位置”,填写“数据库名”和“口令”,点击“下一步”. 3.点击“下一步”. 4.一般会出现 ...
- coding++:win10家庭版升级专业版方案
win10家庭版升级专业版密钥: VK7JG-NPHTM-C97JM-9MPGT-3V66T 4N7JM-CV98F-WY9XX-9D8CF-369TT FMPND-XFTD4-67FJC-HDR8C ...
- 【LeetCode】15.三数之和
题目描述 1. 三数之和 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意: ...