2016-11-07 4 views
2

Я не знаю, почему этот код выводит 0.34 (я ожидал 0.335). Курсор TSQL автоматически округляет переменные типа денег? Пожалуйста, помогите мне, кто знает об этом.TSQL Cursor автоматически округляет переменные типа денег

DECLARE @Rate MONEY; 

DECLARE csrRate 
CURSOR FOR 
    SELECT 0.335 

OPEN csrRate; 
FETCH NEXT FROM 
    csrRate 
INTO 
    @Rate 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     PRINT @Rate 

     FETCH NEXT FROM csrRate INTO @Rate 
    END 
CLOSE csrRate 
DEALLOCATE csrRate 
+3

хорошо традиционно, деньги имеют 2 цифры после десятичной точки! Также: не используйте тип данных MONEY! –

+0

Попробуйте использовать 'DECLARE cSrRate CURSOR для SELECT CAST ('0.335' AS MONEY);'? –

+1

@MitchWheat Тип данных 'MONEY' в SQL Server хранит 4 цифры. В SSMS он также * показывает * до 4 цифр. –

ответ

3

Это поведение по умолчанию, когда используется PRINT. Он отличает money до string. И default является:

enter image description here

Таким образом, вы можете бросить его так:

DECLARE @Rate MONEY; 

DECLARE csrRate 
CURSOR FOR 
    SELECT $0.335 

OPEN csrRate; 
FETCH NEXT FROM 
    csrRate 
INTO 
    @Rate 

    WHILE @@FETCH_STATUS = 0 
    BEGIN 

     PRINT @Rate 
     PRINT convert(varchar(30), @Rate, 2) 
     --SELECT @RATE 


     FETCH NEXT FROM csrRate INTO @Rate 
    END 
CLOSE csrRate 
DEALLOCATE csrRate 

Кроме того, если вы пытаетесь SELECT значение, оно не приводится к строке.

+0

Теперь я знаю, что очень опасно использовать 'PRINT' для отладки. Я буду использовать или использовать 'SELECT' в качестве альтернативы. – pstakashi

Смежные вопросы