Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Hatab Member Откуда: Сообщений: 15 |
Добрый день, уважаемы форумчане. Есть вот такой код: USE [eneca_database15] GO /****** Object: UserDefinedFunction [dbo].[eConvertToBLR] Script Date: 08/26/2016 15:44:53 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[eConvertToBLR] (@Calculation bigint, @Currency nvarchar(3),@Amount real) RETURNS bigint AS BEGIN DECLARE @AmountBLR bigint; SET @AmountBLR=CASE @Currency WHEN 'RUR' THEN ROUND(@Amount*(SELECT RateRUR FROM tblMonthlyVariables WHERE ID=@Calculation),-2) WHEN 'LTL' THEN ROUND(@Amount*(SELECT RateLTL FROM tblMonthlyVariables WHERE ID=@Calculation),-2) WHEN 'USD' THEN ROUND(@Amount*(SELECT RateUSD FROM tblMonthlyVariables WHERE ID=@Calculation),-2) WHEN 'EUR' THEN CONVERT(money,(ROUND(@Amount*(SELECT RateEUR FROM tblMonthlyVariables WHERE ID=@Calculation),-2)),1) WHEN 'UAH' THEN ROUND(@Amount*(SELECT RateUAH FROM tblMonthlyVariables WHERE ID=@Calculation),-2) ELSE ROUND(@Amount,-2) END RETURN(@AmountBLR); END; На данный момент округление идет вот так: Задано число: 1345,87 на выходе: 1300,00 А мне нужно, чтобы: Задано число 1345,87 на выходе было 1345, 87 Заранее спасибо |
26 авг 16, 16:03 [19595043] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
все -2 в ROUND() переделать на 2 ----------- от real тоже лучше избавиться |
26 авг 16, 16:09 [19595062] Ответить | Цитировать Сообщить модератору |
buven Member Откуда: Сообщений: 792 |
Hatab , tblMonthlyVariables - я бы перепроектировал пока не поздно, а то завтра вас попросят добавить еще 10 валют в ту же логику, а вы скажете, что это займет полгода разработки... |
26 авг 16, 16:18 [19595106] Ответить | Цитировать Сообщить модератору |
Serg_77m Member Откуда: Донецк Сообщений: 237 |
А ещё RETURNS bigint, очевидно, не годится. И DECLARE @AmountBLR bigint - тоже. Нужен другой тип. Только не real. |
26 авг 16, 16:37 [19595193] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Осподи милосердный! Откуда эти халтурщики лезут?ALTER FUNCTION [dbo].[eConvertToBLR] (@Calculation bigint, @Currency nvarchar(3), @Amount money ) RETURNS money AS BEGIN RETURN( select round(@Amount * case @Currency WHEN 'RUR' THEN RateRUR WHEN 'LTL' THEN RateLTL WHEN 'USD' THEN RateUSD WHEN 'EUR' THEN RateEUR WHEN 'UAH' THEN RateUAH ELSE 1 end , 2 ) from tblMonthlyVariables WHERE ID=@Calculation ); END; Хотя проектировщики тоже хороши |
26 авг 16, 16:49 [19595260] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
действительно, объявлено, что ф-ция вернет целое, как же можно тогда хотеть, чтобы вернула с двумя знаками после зпт? |
||
26 авг 16, 16:51 [19595268] Ответить | Цитировать Сообщить модератору |
buser Member Откуда: Санкт-Петербург Сообщений: 4537 |
Аффтор кой чё умалчивает... @Amount в копейках, не иначе... |
||
26 авг 16, 17:57 [19595651] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
помноженных на годовую инфляцию, ибо там 1345,87 на входе |
||
26 авг 16, 19:05 [19595919] Ответить | Цитировать Сообщить модератору |
Hatab Member Откуда: Сообщений: 15 |
aleks2, огромное спасибо. Все работает))))) |
20 окт 16, 17:01 [19805584] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |