Форум программистов, компьютерный форум, киберфорум
Энтомолог
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

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

Запись от Энтомолог размещена 16.02.2019 в 17:51
Показов 1980 Комментарии 1
Метки 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
Метки mssql, sql server, t-sql
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Было бы интересно увидеть обобщенный вариант вашей программы. То есть при P = 3, 5, 7, 9, 11, 13, 15 наряду с несимметричной системой счисления (вы описали именно их), существуют ещё симметричные системы счисления. Пример. Рассмотрим симметричную троичную систему счисления. Она состоит из трёх цифр (-1; 0; 1). Обычно её записывают как (2; 0; 1) (где 2 - означает цифру -1). Есть и другие экзотические обозначения. Например (i; 0, 1) или (-; 0, +)
    Перевод в симметричную систему делают из несимметричной (так видимо проще).
    Запись от wer1 размещена 17.02.2019 в 10:37 wer1 вне форума
 
Новые блоги и статьи
Вероятность в шансы / Шансы в вероятность
VistaSV30 31.05.2025
# Шансы -> Вероятность def Chance_to_Probability(ch): def gcd(a, b): # НОД - нужен для упрощения значений шансов while b != 0: a, b = b, a % b return a. . .
FastAPI и Flask: Отличия, производительность и примеры использования
py-thonny 30.05.2025
Если вы разрабатываете веб-приложения на Python, вы наверняка слышали о Flask и FastAPI. Эти два фреймворка часто становятся предметом жарких дискуссий в сообществе разработчиков. И не без основания. . .
ML.NET и TensorFlow.NET: Умные приложения на C# с машинным обучением
stackOverflow 30.05.2025
Еще совсем недавно, когда речь заходила о машинном обучении, C# разработчики обреченно вздыхали и тянулись к Python. Мир искуственного интеллекта словно был огражден невидимым забором с табличкой. . .
Когда сволочизм стал общественной нормой
kumehtar 30.05.2025
Такой цирк порою видишь, не укладывается в голове. Там какие-то парни решили прыгать с парашютом. И снимать на камеру. Привязали к себе собаку, и спрыгнули вместе с нею. И подписали "Отважная. . .
Node.js изнутри: Рантайм, архитектура и исходный код
Reangularity 29.05.2025
Node. js представляет собой среду выполнения JavaScript, построенную на движке V8 от Google Chrome. Но называть его просто "средой выполнения" - все равно что назвать швейцарский нож "штукой с. . .
Обработка Big Data на C#
stackOverflow 29.05.2025
C# традиционно оставался в тени Java, Python и Scala, когда речь заходила о работе с большими данными. Многие считали, что . NET недостаточно зрелая для таких задач. Но времена изменились. Язык C#. . .
Как генерируется мир в Minecraft
GameUnited 28.05.2025
Задумывались ли вы когда-нибудь о том, сколько песчинок на нашей планете? По приблизительным подсчетам - более 7 квинтиллионов! Это цыфра с 18 нулями. И все же, это даже не половина количества. . .
Один суперкластер Kubernetes для вообще всего
Mr. Docker 28.05.2025
Ваша компания развивается, количество сервисов множится, команды разработки разрастаются, а DevOps-инженеры начинают напоминать ту самую собаку из мема про "всё нормально, когда ничего не нормально". . . .
CAP-теорема или почему идеальной распределенной системы не существует
ArchitectMsa 28.05.2025
Вы переводите деньги со своего счета на счет друга. Казалось бы, что может быть проще? Вы открываете приложение банка, вводите сумму, жмете кнопку - и деньги мгновенно переходят с одного счета на. . .
Пишем первый чатбот на C# с нейросетью и Microsoft Bot Framework
UnmanagedCoder 28.05.2025
Microsoft Bot Framework представляет собой мощнейший инструментарий для создания разговорных интерфейсов любой сложности. Он предлагает целостную экосистему, которая включает SDK для C#, сервисы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
OSZAR »