数据类型之实数

实数是带有小数部分的数字。

它不只是为了存储小数部分,也可以使用decimal存储比bigint还大的整数。

MySQL即支持精确类型,也支持不精确类型。

floatdouble类型支持使用标准的浮点运算进行近似计算。

decimal类型用于存储精确的小数。MySQL5.0和更高版本,decimal支持精确计算。而早期版本则使用浮点运算来实现decimal的计算,这样会因为精度损失导致一些奇怪的结果。

因为cpu不支持decimal的直接计算,所以在5.0以及更高本本中,mysql服务器自身实现decimal的高精度计算。相对而言,cpu直接支持原生浮点计算,所以浮点运算明显更快。

浮点和decimal类型都可以指定精度。对于decimal列,可以指定小数点前后所允许的最大位数。这会影响列的空间消耗。

5.0和更高版本将数字打包存储到一个二进制字符串中(每4个字节存储9个数字)。

例如:

decimal(18,9)小数点两边将个存储9个数字,一共使用9个字节,小数点前的数字用4个字节,小数点后的数字用4个字节,小数点本身占1个字节

注意:5.0和更高版本的decimal类型最多65个数字。早期版本的限制是254个数字,保存为未压缩的字符串(每个数字一个字节)

有多种方法可以指定浮点列所需要的精度,这会使得MySQL选择不同的数据类型,或者在存储时对值进行取舍。这些精度定义是非标准的,所以建议不指定精度,只指定数据类型。

浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储,double占用8个字节。

和整数一样,能选择的只是存储类型,MySQL使用double作为内部浮点计算的类型

因为需要额外的空间和计算开销,建议尽量只在对小数进行精确计算时才使用decimal。例如财务数据。数据量比较大的时候,可以考虑使用bigint来替代decimal,将需要存储的货币单位根据小数的位数乘以相应的倍数即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值