使用STR将SQL Float转换为VARCHAR

使用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

我正在尝试使用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,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”更具代表性。