decimal数据类型的用法

本文详细解析了FLOAT、DOUBLE和DECIMAL三种数据类型的差异,包括它们的字节大小、位数、精度特点及应用场景,如银行帐目计算和金额表示等。并对比了它们在算术运算中的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FLOAT、DOUBLE、DECIMAL区别

float:浮点型,4字节,32bit。

double:双精度实型,8字节,64位

decimal:数字型,128bit,不存在精度损失,常用于银行帐目计算。(28个有效位)

decimal(M,N)

M表示:不包括小数点,不包括符号位,所能存数字的总位数(包括小数部分和整数部分)
N表示:小数部分数字的位数,由此可知整数部分的位数为M-N;

DECIMAL数据类型用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。例如,语句DECIMAL (5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。

另:

float和double做算术运算,数值溢出不会报错,精度会因此有损失。decimal会直接报错。

money可以更通用的表示金额,对于便利店商品这种通常固定至小数点后2位时,可以使用decimal。

### Hive 和 MySQL 中 `decimal` 类型的精度和标度 #### 精度 (Precision) 精度是指十进制数值中小数点前后可以存储的最大位数。对于 `decimal(precision, scale)` 来说,precision 参数定义了整个数字允许的最大有效位数。 例如,在 `decimal(5, 2)` 中,总共有 5 位有效数字,其中小数部分占用了两位[^1]。 #### 标度 (Scale) 标度指定了小数点右侧的有效位数。继续上面的例子 `decimal(5, 2)`,这意味着最多有两位位于小数点之后。因此,该字段能够保存像 `-999.99` 到 `999.99` 这样的值(不考虑正负号)。当未指定 precision 或者 scale 的时候,默认情况下会采用不同的设置;比如在 MySQL 中,默认为 `decimal(10, 0)`[^2]。 #### 使用方法 - **声明**: 定义一个具有特定精度和标度的列时,需遵循如下格式: ```sql column_name DECIMAL(precision, scale) ``` - **插入数据**: 插入到此类字段的数据应符合所设定的精度和标度约束条件。如果尝试存入超出这些限制的数据,则可能会引发错误或自动截断处理取决于数据库系统的配置。 - **运算**: 当执行算术操作时,结果也会受到参与计算的操作数各自的精度和标度的影响。特别是在乘除法过程中,可能需要额外注意最终结果的小数位管理以避免不必要的损失准确性。 #### 示例代码展示如何创建表并插入带有不同精度和标度的 decimal 值: ```sql CREATE TABLE example ( id INT PRIMARY KEY, amount DECIMAL(7, 3), price DECIMAL(6, 2) ); INSERT INTO example VALUES (1, 12345.678, 987.65); ``` 在这个例子中,amount 字段被设计成能容纳最大七位整数加上三位小数的形式,而 price 只支持六位整数加两位小数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值