2013-10-23 31 views
4

如何在不使用科學計數法獲得結果的情況下將十進制值轉換爲浮點數?Sql強制轉換爲無科學計數法

例如,如果我的價值是0.000050爲十進制,當我投它漂浮我得到5E-05

我想看到0.00005

+0

哪一種口味SQL的?這是爲Oracle嗎? DB2? SQL Server? MySQL的? Postgres的?還有其他的東西嗎?這些東西都是高度特定於供應商的 - 請通過相應更新問題的標籤告訴我們您正在使用哪個具體數據庫! –

+0

我正在使用SQL Server – Jill

+0

你試過真的嗎? –

回答

8

這有沒有關係轉換爲浮動。它與轉換爲文本有關。你需要看看str()功能:

str(float_expression , total-width , number-of-decimal-places) 

其中

  • 浮動表達意味着什麼,你認爲這是否意味着,
  • 總寬度是所需的總場寬度,包括符號,小數位等
  • 小數點位數是小數點後的位數顯示地點(0-16)。如果指定了16個以上,則格式化的值會在小數點後16位被截斷(不是四捨五入)。

在你的情況,是這樣的:

declare @value float = 0.000050 
select str(@value,12,6) 

應該做你。

編輯注意:str()函數不會以科學計數法顯示任何內容。如果問題是,你要修剪從十進制值尾隨零,你可以做兩件事情:

  • 使用format()功能(SQL Server 2012的唯一):

    declare @x decimal(18,6) = 123.010000 
    select @x      as x1 , 
         format(@x,'#,##0.######') as x2 , -- all trailing zeroes trimmed 
         format(@x,'#,##0.000###') as x3 -- min of 3, max of 6 decimal places shown 
    
  • 使用replace()trim()。適用於任何版本的SQL Server。

    declare @x decimal(18,6) = 123.010000 
    select @x as x1 , 
         replace(rtrim(replace(convert(varchar(32),@x),'0',' ')) , ' ' , '0') 
    
+0

讓我試着更清楚一點。該列是數據類型Decimal(18,6)。我選擇它時將其轉換爲浮點,以截斷多餘的零。我的問題是它以科學記數法返回。你有另一種方式來做到這一點? – Jill

+0

@Jill - 看看我修正的答案。 –

+0

替換()/ trim()解決方案爲我工作!謝謝你的幫助! – Jill

0
ALTER FUNCTION [dbo].[fnExpStringToDecimal] 
(
    @Number AS varchar(50) 
) Returns Decimal(18,7) 
BEGIN 
RETURN (SELECT IIF(CHARINDEX ('E', @Number)> 0,CAST(SUBSTRING(@Number, 1, CHARINDEX ('E', @Number)-1)AS DECIMAL(18,7)) * POWER(10.0000000,CAST(SUBSTRING(@Number, CHARINDEX ('E', @Number)+1, LEN(@Number)) AS DECIMAL(18,7))), @Number)) 
END 
相關問題