sql数据库中的Float数据类型是占几位,几个字节 ,也就是占几个0和1

说白了,SQL数据库中的Float数据类型占用8 个字节,也就是6 4 位。
这6 4 位中,可以精确到小数点后第1 5 位,范围是-1 .7 9 e-3 08 到1 .7 9 e+3 08 首先,这种类型在存储方面非常灵活,因为你可以通过指定精度来调整它。
另一点,float([n]) 中的 n 定义精度。
例如,当n为1 到7 时,它成为实型。
还有一个很重要的细节被很多人忽视了。
当浮点类型处理非常大或非常小的数字时,精度可能会受到影响。

一开始我以为float类型和double类型是一样的,都是用来存储浮点数的,后来发现我错了。
准确度和得分范围与 double 不同。
等等,还有一件事,如果不需要这么高的精度,使用真实类型会节省更多空间。

所以如果需要处理大量数据并且没有特别高的精度要求,不妨考虑使用real类型来节省空间。
很多人没有注意到这一点,但我认为值得一试。

mysql 建表时的价格用什么类型定义?

为了在MySQL中省钱,您可以使用浮点数,例如float、double和decimal。
你的money字段定义为float(9 ,2 ),这意味着总共有9 位数字,小数点后2 位,7 位整数,对吧?
FLOAT 是单精度浮点数。
它支持的数值范围大致如下:负数到-3 .4 02 8 2 3 4 6 6 E+3 8 ,正数到3 .4 02 8 2 3 4 6 6 E+3 8 ,中间为0。
这节经文是理论上的。
实际使用中,可能会受硬件影响而较小。
你的float(9 ,2 )是一个小数加一个整数,总共9 位,小数点后2 位。
MySQL中所有计算都使用双精度,所以float有时会稍微不精确,所以要小心。

DOUBLE是双精度,更加准确。
取值范围更广,范围从负值的-1 .7 9 7 6 9 3 1 3 4 8 6 2 3 1 5 7 E+3 08 到正值的1 .7 9 7 6 9 3 1 3 4 8 6 2 3 1 5 7 E+3 08 双精度可以精确到小数点后1 5 位左右。
Money 字段也可以使用 double,这样更准确。

DECIMAL称为定点数,它与浮点数不同。
它很精确,不会像浮点数那样出现精度损失。
在 DECIMAL(M,D) 中,M 是小数位数总数,D 是小数位数。
例如,DECIMAL(1 0,2 ) 有 9 个整数位和 2 个小数位。
这种类型适合存币,因为不会出现0.1 +0.2 =0.3 000000001 这样的情况。

综上所述,如果你想节省价格,DECIMAL肯定比FLOAT和DOUBLE更好。
DECIMAL(1 0,2 )是最常见的,有9 个整数位和2 个小数位,这就足够了。
FLOAT(9 ,2 )也可以使用,但它会存在精度问题,所以不要将其用于重要计算。

在sql里面要存储带小数的数应该用什么数据类型

老实说,我在处理十进制存储时遇到了很多陷阱。
你提到的SQL操作非常简单,但正确的方法取决于具体的场景。
以MySQL为例,如果要使用NUMBER(1 0,3 )或DOUBLE,首先必须了解精度要求。

例如,我过去接手了一个ERP项目,客户要求财务金额保留到小数点后两位。
一开始我们直接用DOUBLE入金,但是月底结算的时候发现累计误差可以达到0.01 元。
后来改用DECIMAL(1 0,2 ),精度很稳定。
测试时记得插入0.1 3 DOUBLE 结果是 0.3 0000000000000004 ,DECIMAL 正好是 0.3 0。

您使用的 TRUNC 和 ROUND 函数是正确的。
有趣的是,TRUNC 特别常用于金融领域。
例如,银行清算账目时,直接截断,避免因四舍五入而产生争议。
但对于库存盘点之类的事情,使用 ROUND 更有意义。
例如,将0.9 9 米的木材四舍五入为1 米,更符合实际操作。

有一个细节需要注意:在 PHP 中转换整数时,使用 intval() 会直接截掉所有小数位,包括负数的整数部分。
例如,-1 .8 8 变为-1 ,但-1 .5 变为-1 在Java中使用Math.floor(-1 .5 )正好是-2 ,这很烦人。

建表语句中,number(1 0,3 )表示总长度为1 0位,小数点后3 位。
如果存储的是9 9 9 ,9 9 9 ,则实际存储的值为9 9 9 ,9 9 9 (MySQL会自动调整显示,但实际值保持不变)。
我调试的时候差点被这个搞糊涂了,以为9 9 9 ,9 9 9 就是1 000,但是系统自动四舍五入了。

数据量小时使用DECIMAL也可以,但要注意性能。
在一些优化过程中,我发现使用 DECIMAL(2 0,4 ) 查询表的速度是 DOUBLE 的两倍,因为 DOUBLE 内部使用二进制浮点数,而 DECIMAL 是纯数学运算。
当然,如果数据量真的是上亿,就需要考虑分区或者分库。

我自己没有运行过这个,但我记得DECIMAL内存消耗是根据实际数字长度计算的。
例如,9 9 9 9 是 9 9 9 ,9 9 9 的一半。
我记得数据是DECIMAL(1 9 ,4 ),大约使用8 个字节,但我建议你检查当前MySQL版本的具体值。

sql server 小数字段设为哪种类型?