首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在MySQL存储函数中可以截断浮点类型吗?

在MySQL存储函数中可以截断浮点类型吗?
EN

Stack Overflow用户
提问于 2019-06-06 02:28:26
回答 1查看 184关注 0票数 0

我是MySQL和存储函数的新手,所以如果这个问题看起来很基本,我很抱歉。

我正在编写一个存储函数,在该函数中我需要将一个浮点数截断到一定数量的小数位。据我所知,内置的TRUNCATE函数应该为我做这件事;然而,我得到的结果根本不会被截断。唯一值得注意的变化是,预期截断点后的一些数字与原始数字不同。

我已经尝试过使用相同的数字(raw)对truncate函数进行实验,即。选择TRUNCATE(0.00123456,5)作为'Example',它就像预期的那样工作。我有一种感觉,我在存储函数中的问题与在truncate函数中用作参数的float类型有关。

我应该注意到,我首先截断这个数字的原因是round函数未能像预期的那样截断小数位数。我在这里对此进行了更多的解释(并以实际函数为例):What is the proper if clause syntax for a MySQL stored function?,但为了清楚起见,我在下面包含了一些精简的代码。

代码语言:javascript
复制
CREATE FUNCTION 'sfround'(number FLOAT, sigFigs INT) RETURNS FLOAT
DETERMINISTIC
BEGIN

DECLARE nonTruncated FLOAT;
DECLARE truncated FLOAT;
DECLARE decimalsKept INT;

#some not relevant code in the middle

SET nonTruncated = ROUND(number, sigFigs-1-FLOOR(LOG10(ABS(number))));
SET truncated = TRUNCATE(nonTruncated, decimalsKept);

RETURN truncated;

END$$

当我的输入是1到-1之间的任何数字时(不包括0,因为我包含了一个处理0的边缘情况),这个函数产生一个数字,这个数字直到预期的截断点之前都是正确的,在截断点之后,出现一个看似不相关的数字列表(每次调用函数都是相同的数字)。

例如。sfround(0.00123456,5)得到0.0012344999704509974。

是否有什么原因导致截断与浮点类型不兼容?还是我在这里还遗漏了什么?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56466119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档