我知道Round()的用法,它适用于
select round(147.26719,5,1)
返回147.26719。
目前我正在处理从txt文件导入的表,因此所有列都是varchar
,当我使用round()
来处理varchar中的小数时这样
select round('147.26719',5,1)
非常奇怪,它返回147.26718。
我目前正确运行
select round(cast('147.26719', decimal(11,6)),5,1)
但有人可以向我解释为什么会这样吗?我相信这是隐式将varchar转换为十进制的东西,但不知道为什么。
提前致谢
答案 0 :(得分:3)
默认情况下,round()
字符串的隐式转换为float
,而不是小数。浮点数是不精确的,可能只是一个小小的点,从你看到的一点点 - 但足够重要。
您的解决方案是正确的 - 投射到小数。
您可以使用以下代码轻松看到这一点:
select round('123.3', 1) as col
into x;
select *
from information_schema.columns
where table_name = 'x';