Sql server 如何将较大的十进制值转换为浮点值和无指数值

Sql server 如何将较大的十进制值转换为浮点值和无指数值,sql-server,Sql Server,当我尝试将值从十进制转换为浮点时,它们以指数值显示 当我将数值转换为十进制值时,它们显示为.00小数, 但我只需要数字 勾选并提及查询 select cast(CAST(435468867990778789.89 as decimal(35, 2))as float) as APPARENTWACTIMP select CAST(43546886799090787 as decimal(35, 2))as APPARENTWACTIMP select CAST(43546886799090

当我尝试将值从十进制转换为浮点时,它们以指数值显示

当我将数值转换为十进制值时,它们显示为.00小数, 但我只需要数字

勾选并提及查询

select  cast(CAST(435468867990778789.89 as decimal(35, 2))as float) as APPARENTWACTIMP
select  CAST(43546886799090787 as decimal(35, 2))as APPARENTWACTIMP
select  CAST(43546886799090787 as decimal(35, 2))as APPARENTWACTIMP
select CAST(43546886799090787.89 as float)
以上查询结果如下:

4.35468867990779E+17
43546886799090787.00
43546886799090787.00
4.35468867990908E+16
但是我需要一个类似“4354688679077889.89”的结果

select try_parse('43546886799090787.89' as numeric(35,2) using 'en-US')

你能试试下面的查询吗

对此,您可能需要一个案例说明

select case when ceiling(43546886799090787.89) = floor(43546886799090787.89) 
       then      CONVERT(varchar, CAST(43546886799090787.89 as decimal))
       else      CONVERT(varchar, 43546886799090787.89) 
       end 
o/p --> 43546886799090787.89

select case when ceiling(43546886799090787.00) = floor(43546886799090787.00) 
   then      CONVERT(varchar, CAST(43546886799090787.00 as decimal))
   else      CONVERT(varchar, 43546886799090787.00) 
   end
o/p --> 43546886799090787
如果要将值四舍五入到最接近的整数,请使用下面的脚本

select  CAST(CAST(43546886799090787.89 AS decimal) AS varchar)
--O/P -> 43546886799090788

请检查脚本,如果您遇到任何问题,请告诉我。

您可以使用以下命令

declare @testFloat decimal(38,2) = 435468867990778789.89
SELECT CONVERT(varchar, @testFloat)

结果:
435468767907789.89

编辑

根据评论:您可以执行以下操作

declare @testFloat decimal(38,2) = 435468867990778789.89
SELECT CONVERT(varchar, @testFloat)
解释

  • 将字符串分成两部分,点前和点后
  • 然后,
    concat
    这两个结果都只在点后取两个字符
  • 查询

    declare @testFloat numeric(38,6) = 435468867990778789.89656,
            @string varchar(100) 
    set @string = cast(@testFloat as varchar)
    
    select @string = substring(@string,0,charindex('.',@string,0)) 
                     + '.' 
                     + substring(@string,charindex('.',@string,0)+1,2)
    
    select @string
    
    结果:
    435468767907789.89


    希望这将帮助您

    当您执行
    将(43546886790909090787)转换为十进制(35,2))
    时,可能会重复您想要的
    435468867907789.89
    ?输入不相同。选择CAST(4354688679090787.89作为decimal(35,2))作为appearentwactimp请清楚,当某些工具(如SSMS)将值转换为字符串以用于显示时,显示给您的内容与这些数字数据类型中实际存储的内容无关。还要清楚的是,所有这些数据类型的精度都是有限的,因此期望能够在一个数据类型中仅存储18位左右的数字是不太可能的。为什么要转换为float?根据定义,浮动是不精确的;而带精度和刻度的十进制保持着浮点所不能保持的精度;浮点值牺牲了性能的精度。谢谢,但只显示像435468866799090787.00这样的数值,我不需要.00小数。选择try_parse('4354686799090787'作为数字(35,2)使用'en-US')您可能需要一个case语句。请在下面找到我的答案。
    当天花板(4354686799090787.89)=地板(4354686799090787.89)时选择case,然后转换(varchar,CAST(4354686799090787.89作为十进制))或者转换(varchar,435468686799090787.89)结束o/p-->4354688679090787.89
    Hi-Lalit..上面的脚本对您有用吗?。请让我知道,如果您面临脚本的任何问题。如果您能接受答案中的正确答案,并对您认为有帮助的答案进行投票,那将是非常好的。这是因为将来遇到类似问题的其他用户可能会发现它很有帮助。您好,谢谢您的解决方案,但如果是小数点,则希望将值截断2个小数点超过2个我编辑了我的答案,以包括您的要求,希望它能帮助您