mysql Decimal 运算;

mysql Decimal 运算;MySQLDECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。要定义数据类型为DECIMAL的列,请使用以下语法: column_nameDECIMAL(P,D); 在上面的语法中:P是表示有效数字数的精度。P范围为1〜65。 D是表示小数点后的位数。D的范围是0~30。MySQL要求D小于或等于(<=)P。与INT数据类型一样,DECIMAL类型也具有UNSIGNED和ZER…

大家好,又见面了,我是你们的朋友全栈君。

MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。

要定义数据类型为DECIMAL的列,请使用以下语法:

column_name  DECIMAL(P,D);

在上面的语法中:

  • P是表示有效数字数的精度。 P范围为1〜65
  • D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于P

与INT数据类型一样,DECIMAL类型也具有UNSIGNEDZEROFILL属性。 如果使用UNSIGNED属性,则DECIMAL UNSIGNED的列将不接受负值。

如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。 另外,如果我们对DECIMAL列使用ZERO FILL,MySQL将自动将UNSIGNED属性添加到列。

  (其中  p为总位数, 就和float 与double类型的一样   例如  :amount  DECIMAL(6,2);这个表示总共位数有6位,小数占去2位,整数部分为最多4位,最大与最小值9999.99~-9999.99;)

  其中 在MySQL中执行加减乘除
 

create table decimal_test(
id int auto_increment PRIMARY key,
score decimal(5,2)  -- 取值范围是 -999.99 到 999.99
);

ALTER TABLE decimal_test
MODIFY score DECIMAL(6,3) UNSIGNED;

-- 正数:
insert into decimal_test(score) VALUES(1.23); -- 1.23
insert into decimal_test(score) VALUES(123.45); -- 123.45
insert into decimal_test(score) VALUES(123.455); -- 123.46
insert into decimal_test(score) VALUES(123.451); -- 123.45
insert into decimal_test(score) VALUES(123.451123); -- 123.45
insert into decimal_test(score) VALUES(12345.451123); -- Out of range value for column 'score' 
- 负数:
insert into decimal_test(score) VALUES(-1.23); -- -1.23
insert into decimal_test(score) VALUES(-12.34); -- -12.34
insert into decimal_test(score) VALUES(-123.45); -- -123.45
insert into decimal_test(score) VALUES(-999.45); -- -999.45
insert into decimal_test(score) VALUES(-12343); -- Out of range value for column 'score'


UPDATE decimal_test  t  set t.`score`=t.`score`/100 WHERE t.id=1; --0.01
UPDATE decimal_test  t  set t.`score`=t.`score`-100 WHERE t.id=1;-- Out of range value for column 'score' at row 1
-- 除了减法,其他测试正常

  从上边总结可以看出 其中要用sql 直接做运算 除了减法 其他方法可以正常执行;

 嗯 那么碰到减法了,如果当前存储数据比要减少的数据小的话,那最好另外的地方直接做获取结果,最终在需要的地方做更新就好;

  追加, 在java 中 直接给mysql 传decimal 类型数据 让mysql 做计算仍然会出现误差, 最终方案是将其在更新之前 获取结果,最终直接给mysql 传递需要更改的值,做存储就好!!

 just do it!

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160884.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 稀疏矩阵的十字链表存储的思路

    稀疏矩阵的十字链表存储的思路刚才终于完完全全、彻彻底底的搞明白了稀疏矩阵十字链表的存储方式的实现与该算法的思想。我觉得有必要把自己的思路记下来,一呢等自己将来忘记了可以回过头来看,二呢希望与我一样对该存储方式迷惑的朋友可以通过我的文章得到一点点的启示。现在进入正题。       我们知道稀疏矩阵的三元组

    2022年6月18日
    27
  • console.log()的作用与实现[通俗易懂]

    console.log()的作用与实现[通俗易懂]console.log()的作用是什么主要是方便你调式javascript用的。你可以看到你在页面中输出的内容。相比alert他的优点是:1,他能看到结构话的东西,如果是alert,淡出一个对象就是[objectobject],但是console能看到对象的内容。,2,console不会打断你页面的操作,如果用alert弹出来内容,那么页面就死了,但是console输出内容后你页面还可以正常操作。3,console里面的内容非常丰富,你可以在控制台输入:console,然后就可看到:Cons

    2022年7月14日
    18
  • Oracle列转行函数 Listagg() 语法详解及应用实例「建议收藏」

    Oracle列转行函数 Listagg() 语法详解及应用实例「建议收藏」工作中用到一段比较复杂的SQL查询脚本,使用了listagg()函数实现了具有多个值的字段的填充(即,列表聚合,listaggregation(我猜的))。说简单点,listagg()函数可以实现多列记录聚合为一条记录,从而实现数据的压缩、致密化(datadensification)。以下内容转载自http://dacoolbaby.iteye.com/blog/1698957,SQL脚本做了…

    2025年8月29日
    7
  • python-修改目录下带有特定字符的所有文件内容,文件名字,目录名字

    python-修改目录下带有特定字符的所有文件内容,文件名字,目录名字

    2021年5月18日
    135
  • 为什么 select count(*) from t,在 InnoDB 引擎中比 MyISAM 慢?

    为什么 select count(*) from t,在 InnoDB 引擎中比 MyISAM 慢?

    2022年2月14日
    39
  • (数据库)数据库分类

    (数据库)数据库分类1.面向操作的关系型数据库典型性应用领域:ERP,CRM,信用卡交易,中小型电商数据储存方法:表格流行厂商:OracleDatabase,MicrosoftSQLServer,IBMDB2,EnterpriseDB(PostgreSQL),MySQL优点:完善的生态环境保护,事务保证/数据一致性缺点:严苛的数据模型界定,数据库拓展限制,和非结构型的结合应用较难。2.面向数据分析的关系型数据库典型性应用领域:数据仓库,商务智能,数据科学研究数据储存方法:表格流行厂商:OracleE

    2022年6月24日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号