问:银行用什么数据类型来表示余额?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 数据类型转换的骚操作和神奇现象的更多相关文章

  1. Java数据类型转换浅析

    Java数据类型转换分为两种:自动类型转换和强制类型转换. 数据类型转换的关键是数据类型相应的表数范围大小 1.自动类型转换: 概念:小范围数据类型会自动转化成大范围数据类型 实例: int a=10 ...

  2. Java数据类型转换1

    1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...

  3. LoadRunner脚本编写(6)— 数据类型转换和字符串操作

    LoadRunner脚本编写(6)— 数据类型转换和字符串操作 一,数据类型转换 没有使用过C编程的LoadRunner脚本编写者会发现在数据类型转化方面比较困难.下面介绍这方面的知识. 1. 相似函 ...

  4. 第24章 Java 数据类型转换

    每日一句 井底点灯深烛伊,共郎长行莫围棋. 每日一句 What we call "failure" is not falling down, but the staying dow ...

  5. java数据类型转换那点事

    public class kkk { /** * 先看看eclipse对于数值型转换会有哪些报错,但是有一点必须明确,eclipse不报错的,不一定就是说这种思维逻辑是对的 * 可以直接将代码复制过去 ...

  6. Java数据类型转换(自动转换和强制转换)

    数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制. 自 ...

  7. 2、java数据类型转换

    当数据类型不一样时,将会发生数据类型转换. 1.自动类型转换(隐式) 1. 特点:代码不需要进行特殊处理,自动完成. 2. 规则:数据范围从小到大. System.out.println(1024); ...

  8. Java数据类型转换问题

    基本数据类型 整数型 byte --- 字节型 --- 1个字节 --- -27~27-1 -> -128~127 byte b1 = 25; byte b2 = 127; short --- ...

  9. Java中内部类的骚操作

      10.1 如何定义内部类 如代码10.1-1 所示 public class Parcel1 { public class Contents{ private int value = 0;​ pu ...

随机推荐

  1. Redis启动服务和String常用命令

    Redis启动服务和String常用命令 1. 启动Redis服务 E:\redis>redis-server.exe redis.windows.conf _._ _.-``__ ''-._ ...

  2. JVM年轻代,老年代,永久代详解

    前言 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.本篇文章主要讲解内存区域的年轻代,老年代和永久代,略微提及一些垃圾回收算法,下面是正文. 堆整体 堆主 ...

  3. CentOS7 如何安装JDK(以及卸载)

    CentOS7 如何安装JDK(以及卸载) 1. 如何安装JDK? 购买云服务器后,会提供一个公网IP和内网IP,需要使用SSH工具连接到云服务器(推荐使用SecureCRT),随后就能在命令行中操作 ...

  4. spring-boot-plus-v2.0发布了-让天下没有难写的代码

    spring-boot-plus是易于使用,快速,高效,功能丰富,开源的spring boot脚手架 前后端分离,专注于后端服务 目标 每个人都可以独立.快速.高效地开发项目! GITHUB | GI ...

  5. thinkphp 路径 (纯转)

    TP中有不少路径的便捷使用方法,比如模板中使用的__URL__,__ACTION__等,如果你对这些路径不是很明白,用起来说不定就会有这样或那样的问题,抑或出了错也不知道怎么改,现在我们看一下这些路径 ...

  6. 终极指南:构建用于检测汽车损坏的Mask R-CNN模型(附Python演练)

    介绍 计算机视觉领域的应用继续令人惊叹着.从检测视频中的目标到计算人群中的人数,计算机视觉似乎没有无法克服的挑战. 这篇文章的目的是建立一个自定义Mask R-CNN模型,可以检测汽车上的损坏区域(参 ...

  7. [Java8教程]Java8新特性进阶集合

    Java8新特性进阶集合 基于 AOP 抽离方法的重复代码 Java8:当 Lambda 遇上受检异常 Java8:对字符串连接的改进 Java8:Java8 中 Map 接口的新方法 Java8:当 ...

  8. Java 垃圾回收机制方法,判断对象存活算法

    垃圾回收机制: 不定时去堆内存中清理不可达对象.不可达的对象并不会马上就会直接回收, 垃圾收集器在一个Java程序中的执行是自动的,不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回 ...

  9. Hadoop 同步集群时间ntp

    root 用户操作 1,rpm -qa|grep ntp 查看机器是否安装ntp 2,vi /etc/ntp.conf 修改: #restrict 192.168.1.0 mask 255.255.2 ...

  10. Go深入学习之select

    select的用法 1)select只能用于channel的操作(写入.读出),而switch则更通用一些 2)select的case是随机的,而switch里的case是顺序执行 3)select要 ...