public class MysqlDecimal extends Object
decimal 是用来描述十进制大实数值的,包括整数和小数部分,它有 precision和scale两个属性,precision表示该数值最大位数(包括小数,但不包括小数点),
scale表示小数位数,比如,1234.23, 它的precision=6,scale=2,因此它的整数部分的长度是4.
decimal 在计算机内使用变长字节存储,其字节长度会超过8个,根据decimal的数值增大而变长。decimal是十进制的,在它被转化为二进制的过程中
也是使用十进制计算的。
decimal分为小数部分和整数部分,根据precision和scale可以计算出其二进制字节数据,具体参见构造方法。在转化过程中无论是整数部分还是小数部分
都是先按照十进制的位数进行分段,每9位分为一段,每段使用一个int描述,整数部分从低位开始分段,小数部分从高位开始分段,最后一段(简称尾段)可能不足9位。
9位段占满4字节,而尾段根据其位数的不同而占的字节数不同,具体参见DIG2BYTES, 位数即数组下标。比如:
713234568987.0345678992, 被划分成 713 234568987 034567899 2, 713 是整数部分的尾段,共3位,占2个字节, 2是小数部分的尾段,
234568987 是整数部分中9位段,占4个字节,注意都是大尾端,034567899是小数部分的9位段,也占4个字节,整个二进制按照 713,234568987,
034567899,2顺序从低位向高位摆放。
符号表示:
如果是正数,二进制数组的第0个元素^0x80
如果是负数,绝对值转化为二进制后挨个取反,再第0个元素^0x80
| 构造器和说明 |
|---|
MysqlDecimal(int precision,
int scale)
根据指定的精度和小数位数生成decimal的描述信息
|
public MysqlDecimal(int precision,
int scale)
precision - 精度scale - 小数位数public void parse(byte[] buf)
buf - 二进制值public BigDecimal toDecimal()
public int getBinSize()
Copyright © 2019–2020 Alibaba Group Holding Limited. All rights reserved.