簡體   English   中英

將VARCHAR(n)轉換為精確的FLOAT

[英]Convert a VARCHAR(n) to exact FLOAT

我有一個會計申請。 在我的應用程序中,用戶可以確定十進制數的數量,因此我不能使用decimal數據類型,因為它具有固定的精度和decimal

根據本主題, 對會計應用程序美元金額使用浮點數還是小數? ,請勿使用float,因為它只是一個近似值。 因此,我改用VARCHAR(n)作為列的數據類型。

現在,我想在此列上使用SUM函數,並且想要該列的確切值。 我該怎么做?

您不能以常規方式對CHAR數據類型求和。 您需要將其CONVERT為數字,然后進行計算。

我的建議是使用DECIMAL ,如果最終用戶可以更改精度和小數位數,請考慮您可以擁有的最大值,並讓SQL Server將其他數字設置為0

例如,如果您選擇DECIMAL(19, 4)且最終用戶選擇僅具有2個小數位,則SQL Server將其他兩位數字設為0

CREATE TABLE test(mny DECIMAL(18, 4))
INSERT INTO test VALUES (239428394.87)

SELECT * FROM test


OUTPUT
-----------------
239428394.8700

您也可以選擇使用MONEY數據類型。

比較貨幣和十進制

如果要使用CHAR ,請嘗試以下操作:

DECLARE @precision INT
        ,@scale INT
        ,@output VARCHAR(1000)
        ,@input CHAR(10) = '234234.453'

SELECT  @precision = LEN(LEFT(@input, CHARINDEX('.', @input) - 1)) + LEN(SUBSTRING(@input,CHARINDEX('.', @input) + 1, LEN(@input)))
        ,@scale = LEN(SUBSTRING(@input, CHARINDEX('.', @input) + 1, LEN(@input)))

SELECT @Output = 'SELECT SUM(CONVERT(DECIMAL(' + CONVERT(VARCHAR(100), @precision) + ', ' + CONVERT(VARCHAR(100), @scale) + '), ' + CONVERT(VARCHAR(100), @input) + '))'
SELECT @Output
EXEC (@Output)

您可以動態獲取每個數字的精度和小數位數並進行動態查詢

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM