zoukankan      html  css  js  c++  java
  • 随笔1

    Java基本数据类型

    byte 字节型   1字节(8bit) 初始值:0

    char 字符型   2字节(16bit) 初始值:空格

    short 短整型   2字节(16bit) 初始值:0

    int 整型   4字节(32bit) 初始值:0

    long 长整型   8字节(64Bit) 初始值:0L

    float 单精度浮点型   4字节(32bit) 初始值:0.0f

    double 双精度浮点型   8字节(64bit) 初始值:0.0d

    boolean java未明确指出的大小(可能1bit、1byte、4byte) 初始值:false

    Java中有两种转换类型

    1.自动类型转换:编译器自动完成类型转换,不需要在程序中编写代码。

    2.强制类型转换:强制编译器进行类型转换,必须在程序中编写代码。

    由于基本数据类型中 boolean 类型不是数字型,所以基本数据类型的转换是出了 boolean 类型以外的其它 7 种类型之间的转换。

    下面来看下数值类型之间的合法转换图。

    图中的实线箭头表示有信息丢失的转换,虚线箭头表示无信息丢失的转换。其转换规则如下:

    • 如果两个操作数中有一个是double类型,另一个就会转换为double类型;
    • 否则,如果有一个操作数是float,另一个就会转化为float;
    • 否则,如果有一个操作数是long,另一个就会转换为long;
    • 否则,两个操作数都将转换为int类型。

    枚举类型是引用类型,枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象。相同的值则引用同一个对象。可以使用“==”和equals()方法直接比对枚举变量的值,换句话说,对于枚举类型的变量,“==”和equals()方法执行的结果是等价的。

    这个问题涉及到二进制与十进制的转换问题。

    N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。

    double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差(除非实际数据恰好是2的n次方)。

    举个例子来说,比如要用4bit来表示小数3.26,从高到低位依次对应2的1,0,-1,-2次幂,根据最上面的分析,应当在二进制数11.01(对应十进制的3.25)和11.10(对应十进制的3.5)之间选择。

    简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来(甚至是需要无穷多位),而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果。

    浮点数在计算机内部的表示方法,可以看https://blog.csdn.net/sinat_34032056/article/details/68566614

    处理这类问题,可以使用BigDecimal类,在构建BigDecimal对象时应使用字符串而不是double数值。否则,仍有可能引发计算精度问题。

    java.math.BigDecimal。BigDecimal一共有4个够造方法,让我先来看看其中的两种用法:

    第一种:BigDecimal(double val)
    Translates a double into a BigDecimal.

    第二种:BigDecimal(String val)
    Translates the String repre sentation of a BigDecimal into a BigDecimal.

    使用BigDecimal要用String来够造,要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。

  • 相关阅读:
    Django and Djangorestframework
    安装socketio出现module 'importlib._bootstrap' has no attribute 'SourceFileLoader' 错误
    pycharm 里运行 django 工程 You must either define the environment variable DJANGO_SETTINGS_MODULE 错误
    linux 安装python3
    iOS 10.3下解决Fiddler代理抓包ssl证书信任问题
    Android 7.0 fiddler代理抓不到https请求的解决办法
    python base64 decode incorrect padding错误解决方法
    Fiddler做代理服务器时添加X-Forwarder-For转发真实客户端ip
    python安装pbkdf2 遇到错误TypeError: __call__() takes exactly 2 arguments (1 given)
    soapUI通过groovy脚本设置超时时间
  • 原文地址:https://www.cnblogs.com/adret/p/9752064.html
Copyright © 2011-2022 走看看