如题表中有两个字段《油斑》《油迹》,类型都是float,值为 .34 和 2.11现有一个函数,需要拼接字符串,也要用到上面的字段值,但是经过函数处理过后,上面的值变为了0 和 2,怎么回事。函数部分如下:
returns varchar(8000)
as
begin
declare @sql varchar(8000);set @sql=''
select @sql=@sql+ltrim(层位)+':'+ltrim(str(井深1))+
'-'+ltrim(str(井深2))+' 油斑'+ltrim(str(isnull(油斑,0.00)))+'米 油迹'+ltrim(str(isnull(油迹,0.00)))+'米;<br>'
 from QX where 井号=@井号
return @sql
end

解决方案 »

  1.   


    Select Round('0.256333',3)
      

  2.   

    我的SQL是2000的,楼上我没太明白什么意思,能简单的讲解下吗,谢谢了
      

  3.   


    Declare @Number float
    Select @Number=0.3433
    Select Convert(Varchar,@Number)
    Select Convert(Varchar,Round(@Number,2))
    --没那么复杂,直接用连个系统函数就行了
      

  4.   

    STR (float_expression [ , length [ ,decimal ] ] )如果为 STR 提供 length 和 decimal 参数值,则这些值应该是正数。在默认情况下或小数参数为 0 时,数字舍入为整数。参考 http://msdn.microsoft.com/zh-cn/library/ms189527.aspx
      

  5.   

    Declare @Number float
    Select @Number=0.3433
    Select Convert(Varchar,@Number)
    Select Convert(Varchar,Round(@Number,2))
    Select str(@Number)
    函数用错了SQL SERVER 中str函数的用法
    STR函数主要用于返回与指定数值表达式对应的字符。
    语法
    STR(nExpression [, nLength [, nDecimalPlaces]])
    参数
    nExpression
    STR( ) 要计算的数值表达式。
    nLength
    STR( ) 返回的字符串长度。该长度包括小数点所占的字符和小数点右边每个数字所占的字符。
    如果指定长度大于小数点左边数字位数,STR( ) 用前导空格填充返回的字符串;如果指定长度小于小数点左边的数字位数,STR( ) 返回一串星号,表示数值溢出。
    nDecimalPlaces
    由 STR( ) 返回的字符串中的小数位数。若要指定小数位数,必须同时包含 nLength。
    如果指定的小数位数小于 nExpression 中的小数位数,则截断多余的数字。
    返回值类型
    字符型
    当数字转换为字符串时,始终为 Number 的符号保留一个前导空格。如果 Number 为正,则返回的字符串包含前导空格,并暗含加号。负数将包括减号 (-),且没有前导空格。
    使用 Format 函数转换您需要格式化为日期、时间或货币或者其他用户定义格式的数值。与 Str 函数不同,Format 函数不包含用于 Number 的符号的前导空格。
    值得注意的是,Str 函数只将句点 (.) 识别为有效的小数点分隔符。如果使用其他小数点分隔符(例如在国际应用程序中),请使用 CStr 或 Format 函数将数字转换为字符串。若要获得特定区域中数字的字符串表示形式,请使用数字的 ToString(IFormatProvider) 方法。例如,将 Double 类型的值转换为字符串时,使用 ToString。
    declare @a decimal(10,4)  
    set @a=.1234  
    select cast(cast(@a*100 as varchar)as varchar)+'%'--12.3400%  
    select cast(cast(str(@a*100,5,2) as varchar)as varchar)+'%'--12.34%