263个人登录入口,芜湖网站优化公司,空间设计师网站,wordpress模板製作文章目录MySQL 中的小数类型decimaldoublefloatJava 中的小数类型floatdoubleBigDecimal金额的计算MySQL 中的小数类型
decimal
MySQL 使用 decimal 保存高精度的小数#xff0c;可以设置保留的小数个数。decimal(m,d)#xff0c;表示该值一共显示 m 位整数#xff0c;其中…
文章目录MySQL 中的小数类型decimaldoublefloatJava 中的小数类型floatdoubleBigDecimal金额的计算MySQL 中的小数类型
decimal
MySQL 使用 decimal 保存高精度的小数可以设置保留的小数个数。decimal(m,d)表示该值一共显示 m 位整数其中 d 位位于小数点后面。
decimal 和 numeric 类型在 MySQL 中视为相同的类型。它们用于保存必须为确切精度的值例如货币数据。当声明该类型的列时可以(并且通常要)指定精度和标度。 例如
salary decimal(5,2)在该例子中5 是精度2 是标度。精度表示保存值的主要位数标度表示小数点后面可以保存的位数。
在标准SQL中语法 decimal(m) 等价于 decimal(m,0)。同样语法 decimal 等价于 decimal(m,0)可以通过计算确定 m 的值。在MySQL 5.1中支持 decimal 和 numeric 数据类型的变量形式。m 默认值是 10。
decimal 或 numeric 的最大位数是 65但具体的 decimal 或 numeric 列的实际范围受具体列的精度或标度约束。如果此类列分配的值小数点后面的位数超过指定的标度允许的范围值被转换为该标度。(具体操作与操作系统有关但一般结果均被截取到允许的位数。
注当对 decimal 类型的数据进行运算操作时如果数值溢出会报错。
double
salary double(7,4)在该例子中7 是精度4 是标度精度范围是 24~53。
MySQL 将 double 视为 double precision(非标准扩展)的同义词。MySQL 还将 real 视为 double precision(非标准扩展)的同义词除非 SQL服务器模式包括 REAL_AS_float 选项。
为了保证最大可能的可移植性需要使用近似数值数据值存储的代码应使用 float 或 double precision不规定精度或位数。
注double 数据在运算时如果数字溢出不会报错会有精度的损失。
float
float 类型用于表示近似数值数据类型。SQL 标准允许在关键字 float 后面的括号内选择用位指定精度(但不能为指数范围)。0 到 23 的精度对应 float 列的 4 字节单精度。
例如定义为 float(7,4) 的一个列可以显示为 -999.9999。MySQL 保存值时进行四舍五入因此如果在 float(7,4) 列内插入 999.00009近似结果是 999.0001。
注float 数据在运算时如果数字溢出不会报错会有精度的损失。
Java 中的小数类型
float
单精度浮点型含字节数为 432bit差不多 7 个有效位整数部分最多 7 位小数部分最多 7 位取值范围太小几乎没有用
double
双精度浮点数含字节数为 864bit差不多 15 个有效位整数部分最多 15 位小数部分最多 15 位基本够用计算金钱可以达到 1 亿亿以内的范围。
BigDecimal
比较大的小数只能使用 BigDecimal 来接收MySQL 数据库 decimal 可以保存最多 65 位的小数但是 double 只能接收差不多 15 位的小数。
数据库获取到数据需要转换成字符串类型然后再使用 BigDecimal(String) 构造器将数值封装成一个 BigDecimal 对象。
金额的计算
金额需要转成最小单位例如1.24 元需要转换成 124 分再进行计算计算后再转换成元