русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Числа прописью


Дата добавления: 2015-07-09; просмотров: 704; Нарушение авторских прав


В практической жизни для печати различных документов полезна функция преобразования числа в строку, где число указано словами. Ниже приведен пример решения этой задачи на Oracle для чисел меньших миллиона. При желании диапазон чисел легко расширить до необходимого значения. Переписать код для другой СУБД также не представляет никакой сложности. Возможно можно и проще, но привожу, что первое пришло в голову.

-- таблица сопоставления чисел и строкcreate table numbers(n integer,gender integer, str varchar(20), CONSTRAINT pk_numbers PRIMARY KEY (n,gender)); /*0 - без разницы какой род1 - мужской род2 - женский род3 - средний род*/ insert into numbers values(0, 0,'ноль');insert into numbers values(1, 1,'один');insert into numbers values(1, 2,'одна');insert into numbers values(1, 3,'одно');insert into numbers values(2, 1,'два');insert into numbers values(2, 2,'две');insert into numbers values(3, 0,'три');insert into numbers values(4, 0,'четыре');insert into numbers values(5, 0,'пять');insert into numbers values(6, 0,'шесть');insert into numbers values(7, 0,'семь');...insert into numbers values(19, 0,'девятнадцать'); insert into numbers values(20, 0,'двадцать');insert into numbers values(30, 0,'тридцать');...insert into numbers values(90, 0,'девяносто'); insert into numbers values(100, 0,'сто');insert into numbers values(200, 0,'двести');...insert into numbers values(900, 0,'девятьсот'); insert into numbers values(1000, 0,'тысяча');insert into numbers values(4000, 0,'тысячи');insert into numbers values(5000, 0,'тысяч');commit; -- сохраняет в r число до 100 прописью create or replace procedure n100_inwords(an integer, ag in integer,r out varchar) is tmp integer:=0; st varchar(255);begin -- числа меньшие 20 if an < 20 then select t.str into r from numbers t where t.n=an and (t.gender=ag or t.gender=0 ); else tmp:=mod(an,10); if tmp !=0 then -- единицы select t.str into st from numbers t where t.n=tmp and (t.gender=ag or t.gender=0); end if; -- десятки tmp:= an-tmp; select t.str into r from numbers t where t.n=tmp and (t.gender=ag or t.gender=0); r:=r||' '||st; end if; end n100_inwords; -- сохраняет в r число до 1000 прописью create or replace procedure n1000_inwords(an integer, ag in integer, r out varchar) is tmp integer; st varchar(255);begin tmp:= mod(an,100); if tmp!=0 or (tmp=0 and an=0) then n100_inwords(tmp,ag,st); end if; -- сотни tmp:=an-tmp; if tmp>0 then select t.str into r from numbers t where t.n=tmp and (t.gender=ag or t.gender=0); r:=r||' '||st; else r:=st; end if; end n1000_inwords; -- сохраняет в r число до 1000000 прописью create or replace procedure n1000000_inwords(an in integer, ag in integer, r out varchar) is tmp integer; tmp1 integer; st varchar(255);begin tmp:= mod(an,1000); if tmp>0 or (tmp=0 and an/1000=0) then n1000_inwords(tmp,ag,r); else r:=''; end if; -- тысячи tmp:=an-tmp; if tmp>0 then tmp1:= mod(tmp,10000); select t.str into st from numbers t where (t.n=1000 and tmp1=1000) or (t.n>1000 and t.n < =4000 and tmp1>1000 and tmp1 < =4000) or (t.n>=5000 and (tmp1>=5000 or tmp1=0)); r:=st||' '||r; tmp:=tmp / 1000; n1000_inwords(tmp,2,st); r:=st||' '||r; end if; end n1000000_inwords; -- возвращает строку - число до 1000000 прописью create or replace function int_inwords(n in integer, g in integer) return varchar2 is r varchar2(255);begin n1000000_inwords(n,g,r); return r;end int_inwords; -- проверкаselect int_inwords(815334,1)||' руб. '|| int_inwords(32,2)||' коп.' as summa from dual


<== предыдущая лекция | следующая лекция ==>
Триггеры | Транзакции, конкурирующие запросы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.16 сек.