zoukankan      html  css  js  c++  java
  • mysql 字符串数值计算 精度丢失

    我进行了一些测试。
    truncate(abs('414')/100,2)
    truncate('414'/100,2)
    truncate('4.14',2)
    truncate('4.1400',2)
    都有精度丢失。

    TRUNCATE(cast(ABS(字符串)/100 as decimal(15,4)) ,2)
    上述方法,ABS(字符串)/100得到的应该是double类型,cast是将double类型强制转换为了decimal类型,这个过
    程精度是保持不变的吗?
    select truncate(cast(abs('414')/100 as decimal(15,4)),2);
    测试结果是正确的4.14

    TRUNCATE(ABS(cast(字符串)as decimal(15,4))/100 ,2)
    select truncate(abs(cast('414' as decimal(15,4)) )/100 ,2);
    测试结果也是正确的4.14

    select
    truncate( -- decimal
    cast -- decimal,此处可能会损失精度
    (
    abs('414') -- double
    /100 -- double
    as decimal(15,4)
    )
    ,2
    );


    正确只是巧合。


    select
    truncate( -- decimal
    abs( -- decimal
    cast('414' as decimal(15,4)) -- decimal
    )/100, -- decimal
    2
    );


    所以用下面的方法才是对的。

  • 相关阅读:
    Linux vi/vim
    Linux 磁盘管理
    Linux 用户和用户组管理
    Linux 文件与目录管理
    Linux 文件基本属性
    Linux 远程登录
    Linux 忘记密码解决方法
    Linux 系统目录结构
    Linux 系统启动过程
    linux -- su和sudo命令的区别
  • 原文地址:https://www.cnblogs.com/mydriverc/p/7007637.html
Copyright © 2011-2022 走看看