Округление денег до десятичного знака в SQL Server - PullRequest
2 голосов
/ 16 февраля 2010

Я пытаюсь округлить до 3 десятичных знаков из двух переменных типа money в SQL Server 2008.

DECLARE @Val1 money = 554.5344
DECLARE @Val2 money = 84020.37
DECLARE @Result decimal(6,5) = @Val1/@Val2 *100
SELECT @Result

Результат выше 0,65. С калькулятором это 0,65999995001212, мне нужен результат 0,659.

Ответы [ 5 ]

2 голосов
/ 16 февраля 2010

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

DECLARE @Val1 money = 554.5344 
DECLARE @Val2 money = 84020.37 
DECLARE @Result decimal(6,3) = @Val1 * 100 / @Val2
SELECT @Result

Ваша проблема в том, что ДЕНЬГИ имеют только 4 знака после запятой, поэтому при делении 554,5344 на 84020,37 вы получаете 0,0065, поэтому при умножении на 100 вы получаете 0,6500. Если вы сначала умножите на 100, вы поделите 55453,44 на 84020,37 и получите 0,659, что вам и нужно.

2 голосов
/ 16 февраля 2010

Результат не может быть 0,659 - точный результат, округленный до 5 мест, равен 0,66000.

И вы никогда не должны делить деньги на деньги :) По крайней мере, не напрямую; Правильный результат можно получить следующим образом:

DECLARE @Val1 money = 554.5344
DECLARE @Val2 money = 84020.37
DECLARE @Result decimal(6,5) = cast(@Val1 as float)/@Val2*100
SELECT @Result
1 голос
/ 16 февраля 2010

Если вы хотите, чтобы 0,659999 было «округлено» до 0,659, вы усекаете, а не округляете ...

Кроме того, вы, вероятно, хотите использовать стандартную функцию ROUND , которая также может использоваться для усечения. См. ответы на этот вопрос

0 голосов
/ 16 февраля 2010

Чтобы получить все значения после десятичной точки, вы должны использовать float. Затем используйте функцию round [1].

ОБЪЯВИТЬ @ Val1 float
ОБЪЯВИТЬ @ Val2 float SET @ Val1 = 554,5344 SET @ Val2 = 84020.3700 ОБЪЯВИТЬ @Result float SET @Result = round (@ Val1 / @ Val2 * 100, 3) SELECT @ Result

0 голосов
/ 16 февраля 2010

Чтобы получить тот же результат, что и в калькуляторе, вам нужно использовать FLOAT, а не ДЕНЬГИ:

DECLARE @Val1 float 
DECLARE @Val2 float
SET @Val1= 554.5344
SET @Val2= 84020.3700
DECLARE @Result float
SET @Result = @Val1/@Val2 *100
SELECT @Result

дает: 0,65999995001212

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...