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
    );


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

  • 相关阅读:
    第二冲刺阶段个人博客
    单元测试
    软件工程个人总结
    梦断代码阅读笔记03
    梦断编码阅读笔记02
    梦断代码阅读笔记01
    padding margin
    MVC模式在Java Web应用程序中的实例分析
    小问题
    MVC理解
  • 原文地址:https://www.cnblogs.com/mydriverc/p/7007637.html
Copyright © 2011-2022 走看看