mysql 保留小数位数的一个方法

问题: 仪器测量的数值是整数,其精度由系数控制。例如 测量值是 Val=12345, 系数coeff = 0.1 ,则其表达的结果是 1234.5, 小数部分要和系数的小数部分一致;如果系数大于1,则没有小数部分。
方法如下:

      set @pointN=0;
      IF pqCoeff < 1 THEN
        SET @pointN = -1 * LOG10(pqCoeff);
      END IF;

      SET @dspVal = FORMAT(@dspVal, @pointN);
      SET @dspVal = REPLACE(@dspVal,",","");
     --  SET @dspVal = CONVERT (@dspVal,decimal);
      SET retVal = @dspVal;

解释如下:
利用常用对数获得小数的位数(上述表达式只支持 0.1,0,01 这种方式), 然后利用format 函数获得保留小数位数的值。 本以为到此就结束了,没想到在转换成decimal 时,报错。错误是

DB error found , error = HY000, message = Incorrect decimal value: '3,091' for column 'retVal' at row 1

原来format 函数再处理之后,将数字表示成了 以逗号分割的形式,而这种格式竟然不被支持! 因此才有了下面的的这句:

 SET @dspVal = REPLACE(@dspVal,",","");

目的是去掉其中的逗号,从而保证不出错误。
大家也应该注意到,这句:

SET @dspVal = CONVERT (@dspVal,decimal);

本来想用这个转换函数,然而这个函数并不是你想象的那样。如图:
在这里插入图片描述
这个结果显然不是希望得到的,再比如:

在这里插入图片描述

它将逗号后面的值都去掉了,因此不能这样做。这样就只能采取上面代码的方法了。
不知道有没有什么更好的方法。

是记。

maraSun BJFWDQ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值