2015-11-04 2 views
1

У меня есть функция создания sql, которая вернет тип данных float. Я хотел бы знать, как мне показать результаты до двух десятичных знаков.Возвратите две десятичные точки в функции создания

ALTER FUNCTION [dbo].[udf_get_total] 
(
-- Add the parameters for the function here 
@code as int 
) 
RETURNS FLOAT 
AS 
BEGIN 
-- Declare the return variable here 
DECLARE @quantity as FLOAT 
DECLARE @price as FLOAT 

    -- Add the T-SQL statements to compute the return value here 
SET @quantity = (SELECT quantity FROM Requested_Item where Code_id = @code) 
SET @price = (SELECT price FROM Requested_Item where Code_id = @code) 
-- Return the result of the function 
RETURN @quantity * @price 

END 

Примеры результатов:

1632.1740985705144 
6323.8092596543638 
+0

Так что вы хотите, чтобы результаты быть '' 1632.17' и 6323.80'? – MusicLovingIndianGirl

+0

@ Айшварья Картик, да, безусловно. – gvIC

+0

Проверьте мой ответ ниже, если он работает. Пожалуйста, воздержитесь, если это произойдет. – MusicLovingIndianGirl

ответ

1

Применение CAST

select cast(float_column as decimal(10,2)) 
from your_table 

decimal(10,2) будет отображать 10 цифр до точки и 2 после него.

+0

Фактически, он будет отображать максимум 8 цифр перед десятичной точкой и 2 после десятичного числа – Adish

0

Попробуйте это:

RETURN TRUNCATE(@quantity * @price, 2) 

2-в конце означает, что будет 2 знака после запятой. Вы действительно можете использовать функцию TRUNCATE в любом месте - единственный недостаток заключается в том, что она действительно не округляет числа.

+0

. В нем говорится, что инструкции RETURN в скалярнозначных функциях должны содержать аргумент. ' – gvIC

0

Я только изменил оператор возврата моей функции

RETURN CAST ((@total/@cur_amount) as decimal(10,2))

и он показывает 2 десятичной точки.

1

Прежде всего. Я бы переписал вашу функцию. Вы дважды запрашиваете таблицу. Это можно сделать, выполнив одну инструкцию SELECT. См. Этот код:

ALTER FUNCTION [dbo].[udf_get_total] 
(
    @code AS INT 
) 
RETURNS FLOAT 
AS 
BEGIN 
    -- Declare the return variable here 
    DECLARE @quantity AS FLOAT 
     , @price AS FLOAT; 

    SELECT @quantity = quantity, @price = price 
    FROM Requested_Item 
    WHERE Code_id = @code; 

    -- Return the result of the function 
    RETURN @quantity * @price; 
END 

Теперь как правильно отформатировать ваши номера? Я использовал этот метод с CEILING и немного математики:

DECLARE @first FLOAT = 1632.1740985705144 
    , @second FLOAT = 6323.8092596543638; 


SELECT FLOOR(@first * 100)/100 
    , FLOOR(@second * 100)/100; 

Это приносит запрошенную результат:

╔═════════╦════════╗ 
║ 1632.17 ║ 6323.8 ║ 
╚═════════╩════════╝ 
Смежные вопросы