我们如何将大尺寸的十进制值转换为float并且没有指数值

时间:2017-12-04 12:02:39

标签: sql-server

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

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

检查提及查询。

4.35468867990779E+17
43546886799090787.00
43546886799090787.00
4.35468867990908E+16

以上查询结果为

{{1}}

但我要求的结果如" 435468867990778789.89"。

3 个答案:

答案 0 :(得分:1)

试试这个

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

答案 1 :(得分:1)

您可以尝试以下查询吗?。

您可能需要此

的案例陈述
select  CAST(CAST(43546886799090787.89 AS decimal) AS varchar)
--O/P -> 43546886799090788

如果要将值四舍五入为最接近的整数,请使用以下脚本。

{{1}}

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

答案 2 :(得分:1)

您可以使用以下

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

OR

SELECT cast(@testFloat as varchar)

结果:435468867990778789.89

修改

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

<强>解释

  1. 将字符串分成两部分,分别在点之前和之后。
  2. 然后concat只会在点后面只取两个字符。
  3. <强>查询

    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
    

    结果:435468867990778789.89

    希望这会对你有所帮助