2011-06-27 122 views
3

我有以下UDFMySQL数据类型声明中DECIMAL(x,y)中x和y的边界值是什么?

drop function if exists getCurrency$$ 

create function getCurrency(dt datetime, x decimal(19,4), y decimal(19, 4)) 
returns decimal(10,4) reads sql data 
begin 
    declare currencyval decimal(10,4); 

    /* Some conditions */ 
    select case when dt = "2000-12-31" then 0 else round((x/y), 4) into currencyval; 

    return currencyval; 
end$$ 

有时这UDF抛出数据截断误差。 我可以解决这个问题,但之前我甚至想要一些有关十进制数据类型和参数10,4的重要性的信息。

如果您举一些边界条件的例子,这将是一件好事。

回答

6

10, 4表示6位数字(整数部分)在点之前和4之后(小数部分)。

所以最大的可能数量就可以返回是999999.9999

你的具体情况是不可能说什么值边界为x和/或y,但你可以,如果检查返回值是否(currencyval)出-999999.9999 .. 999999.9999范围。

顺便说一句,如果你在DECIMAL (x, y)记录询问xy,则:

  • x = 1..65
  • y = 0..30 && y <= x

参考文献:

+0

此链接已死,但答案仍在此处。 10还有6?我期望从这个例子中可以看出'L_NUM NUMBER(10,4)的精度可以达到10位数,其中4位可以放在小数点后面。“对此,情况并非如此([source](http://psoug.org) /definition/number.htm))。 – gsamaras

+1

@gsamaras decumal(10,4)表示数字部分为6,小数部分为4。链接是固定的,谢谢。 – zerkms

相关问题