Форум программистов, компьютерный форум, киберфорум
Наши страницы
Энтомолог
Войти
Регистрация
Восстановить пароль
Оценить эту запись

Transact-SQL. Как перевести целое число из десятичной системы счисления в другую и обратно

Запись от Энтомолог размещена 16.02.2019 в 17:51
Метки mssql, sql server, t-sql

Учебная программа. Надеюсь, вы поможете её улучшить.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
declare @input tinyint = 15; -- исходное число в десятичной системе счисления
declare @x nvarchar(8) = 'none'; -- исходное число, преобразованное в систему счисления с основанием @p
declare @y nvarchar(3) = 'nil'; -- число @x, преобразованное в десятичную систему счисления
declare @p tinyint = 2;
 
if(@input >= 0 AND @input <= 255 AND @p >= 2 AND @p <= 16)
    begin   
        -- 10 -> P
        declare @a tinyint = @input;
        declare @m tinyint = 0;
        declare @s nvarchar(8) = '';
 
        if (@a = 0)
            select @s = '0';
        else
            while (@a != 0)                             
                    select @m = @a % @p,
                           @a = @a / @p,    
                           @s = case @m                                 
                                    when 10 
                                    then 'A'
                                    when 11
                                    then 'B'
                                    when 12
                                    then 'C'
                                    when 13
                                    then 'D'
                                    when 14
                                    then 'E'
                                    when 15
                                    then 'F'
                                    else cast(@m as nvarchar(2))
                                end     
                                + @s;                
    
        select @x = @s;
        
        -- P -> 10
        select @m = 0, 
               @y = '';
        select @a = len(@s);
        declare @l tinyint = @a;
        declare @c nvarchar(1) ='';
 
        while (@a != 0)
            select @c = substring(@s, @a, 1), 
                   @m = @m + case @c 
                                 when 'F'
                                 then 15
                                 when 'E'
                                 then 14
                                 when 'D'
                                 then 13
                                 when 'C'
                                 then 12
                                 when 'B'
                                 then 11
                                 when 'A'
                                 then 10
                                 else cast(@c as tinyint)
                        end * power(@p, @l - @a),
                   @a = @a - 1;
                
        select @y = cast(@m as nvarchar(3));
    end
else
    print 'Входной параметр input должен иметь значение в интервале от 0 до 255 включительно. Основанием системы счисления может быть только целое число в интервале от 2 до 16 включительно';
 
print 'input -> X -> Y';
print 'Число X в системе счисления с основанием P: ' + @x;
print 'Число Y в десятичной системе счисления: ' + @y;
go 1
Результат выполнения:
Цитата:
input -> X -> Y
Число X в системе счисления с основанием P: 1111
Число Y в десятичной системе счисления: 15
Размещено в Без категории
Просмотров 117 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru