问题: 仪器测量的数值是整数,其精度由系数控制。例如 测量值是 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