使用STR将SQL Float转换为VARCHAR
我正在尝试使用STR函数将浮点值转换为精度为2十进制的字符串值。工作正常,但在尝试转换1.525的值时,我得到了一个错误的数字。我应该得到1.53,我得到1.52使用STR将SQL Float转换为VARCHAR,sql,sql-server,Sql,Sql Server,我正在尝试使用STR函数将浮点值转换为精度为2十进制的字符串值。工作正常,但在尝试转换1.525的值时,我得到了一个错误的数字。我应该得到1.53,我得到1.52 Does not work Select rtrim(ltrim(Str(1.525, 10,2))) 1.52 Works for these Select rtrim(ltrim(Str(1.225, 10,2))) 1.23 Select rtrim(ltrim(Str(1.325, 10
Does not work
Select rtrim(ltrim(Str(1.525, 10,2)))
1.52
Works for these
Select rtrim(ltrim(Str(1.225, 10,2)))
1.23
Select rtrim(ltrim(Str(1.325, 10,2)))
1.33
Select rtrim(ltrim(Str(1.515, 10,2)))
1.52
Select rtrim(ltrim(Str(1.535, 10,2)))
1.54
更新
我用了一个值“N2”,现在它工作正常了。关于使用此功能的任何评论,2012年以后支持。另外,第二个参数可以动态构造以支持不同的精度如果您的目标是将字符串转换为四舍五入为两位小数的数字类型,然后对其执行其他操作,我会使用CAST或100%转换,可能使用ROUND和其他函数,但在你的情况下,CAST使用的精度不适合我们的四舍五入 以下是问题查询的另一种形式:
Select cast(cast('1.525' as numeric(10, 2)) as varchar(11));
-- returns '1.53'
-- note that I don't really have to recast it as a varchar,
-- but that's what type your example query would return,
-- so I tried to match that
你到底为什么坚持使用STR来实现这一点?你使用的是什么版本的SQL Server?我得到的结果与你用2008发布的结果不同。你为什么用FLOAT?选择小数点12,2,'1.525';浮点不精确-如果需要精确,可以使用数字或十进制类型转换不起作用:从dbo.MyTable中选择FloatValue、CONVERTdecimal13,2、FloatValue、CASTFloatValue作为小数10,2。使用SQL server 2012转换不起作用意味着什么?还有,这里是。我使用STR是因为精度是动态的,RTRIMLTRIMSTR@value, 102, ISNULL@precision2.无论如何,您的解决方案仍然给出了错误的答案1.52,因为该值最初是浮点类型。我试过四舍五入,结果不准确。在这两者之间,我起诉SQLServer2012,想知道@ken在您的示例中,您没有使用浮点,而是使用了字符串。我在你的问题中看到你说这是一个浮动。为什么不更改示例查询以显示正在使用的浮点值而不是字符串?即使将“1.525”选为浮动也比“1.525”更具代表性。