powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сумма прописью
20 сообщений из 20, страница 1 из 1
Сумма прописью
    #39827306
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Двадцать две тысячи рублей 11 копеек" нужно перевести в 22000.11 (currency).

?
...
Рейтинг: 0 / 0
Сумма прописью
    #39827322
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
берём прямую задачу - из числа в буквы

заполняем табличку
digitsletters1один2два......22000Двадцать две тысячи......

...

ПРОФИТ!!!
...
Рейтинг: 0 / 0
Сумма прописью
    #39827339
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мигалка,

блестяще!
...
Рейтинг: 0 / 0
Сумма прописью
    #39827387
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

Ну, намёк он правильный дал. Общая идея примерно такая:

осторожно, говнокод!
Код: pascal
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.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
program numbers;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, System.Character;

type
  TNumberWord = record
    Name:  string;
    Value: Integer;
  end;

const
  NumberWords: array [0..37] of TNumberWord = (
    (Name: 'восемнадцать'; Value: 18),
    (Name: 'восемь'; Value: 8),
    (Name: 'восемьдесят'; Value: 80),
    (Name: 'восемьсот'; Value: 800),
    (Name: 'два'; Value: 2),
    (Name: 'двадцать'; Value: 20),
    (Name: 'две'; Value: 2),
    (Name: 'двенадцать'; Value: 12),
    (Name: 'двести'; Value: 200),
    (Name: 'девяносто'; Value: 90),
    (Name: 'девятнадцать'; Value: 19),
    (Name: 'девять'; Value: 9),
    (Name: 'девятьсот'; Value: 900),
    (Name: 'десять'; Value: 10),
    (Name: 'один'; Value: 1),
    (Name: 'одиннадцать'; Value: 11),
    (Name: 'одна'; Value: 1),
    (Name: 'пятнадцать'; Value: 15),
    (Name: 'пять'; Value: 5),
    (Name: 'пятьдесят'; Value: 50),
    (Name: 'пятьсот'; Value: 500),
    (Name: 'семнадцать'; Value: 17),
    (Name: 'семь'; Value: 7),
    (Name: 'семьдесят'; Value: 70),
    (Name: 'семьсот'; Value: 700),
    (Name: 'сорок'; Value: 40),
    (Name: 'сто'; Value: 100),
    (Name: 'три'; Value: 3),
    (Name: 'тридцать'; Value: 30),
    (Name: 'тринадцать'; Value: 13),
    (Name: 'триста'; Value: 300),
    (Name: 'четыре'; Value: 4),
    (Name: 'четыреста'; Value: 400),
    (Name: 'четырнадцать'; Value: 14),
    (Name: 'шестнадцать'; Value:16 ),
    (Name: 'шесть'; Value: 6),
    (Name: 'шестьдесят'; Value: 60),
    (Name: 'шестьсот'; Value: 600));

function FromString(const Value: string): Currency;

  function GetWord(var S: PChar): string;
  var
    E: PChar;
    Len: Integer;
  begin
    while S^.IsWhiteSpace do Inc(S);
    E := S;
    while E^.IsLetter do Inc(E);
    SetLength(Result, E - S);
    Move(S^, Result[1], Length(Result) * SizeOf(Char));
    S := E;
  end;

var
  S: PChar;
  Current: string;
  NumWord: TNumberWord;
  NumPart: Int64;
begin
  Result := 0;
  NumPart := 0;
  S := PChar(Value);
  while S^ <> #0 do
  begin
    Current := GetWord(S);
    if StrLComp(Pointer(Current), 'тысяч', 5) = 0 then
    begin
      Result := Result + NumPart * 1E3;
      NumPart := 0;
    end else if StrLComp(Pointer(Current), 'миллион', 7) = 0 then
    begin
      Result := Result + NumPart * 1E6;
      NumPart := 0;
    end else if StrLComp(Pointer(Current), 'миллиард', 8) = 0 then
    begin
      Result := Result + NumPart * 1E9;
      NumPart := 0;
    end else
      for NumWord in NumberWords do
        if Current = NumWord.Name then
        begin
          NumPart := NumPart + NumWord.Value;
          Break;
        end;
  end;
  Result := Result + NumPart;
end;

begin
  try
    Writeln(FromString('двенадцать миллионов шестьсот тридцать восемь тысяч сорок два'): 12:2);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

...
Рейтинг: 0 / 0
Сумма прописью
    #39827442
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёблестяще!
учись, студент!©


зы. на FB форуме куча топиков с готовыми решениями для БД
...
Рейтинг: 0 / 0
Сумма прописью
    #39827555
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

дай, пожалуйста, ссылку. Сразу не находится. Может пригодится. Из числа в строку востребовано. Обратная процедура как-то никогда не требовалась.
...
Рейтинг: 0 / 0
Сумма прописью
    #39827595
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратный перевод слишком трудоёмок и решаем лишь в конкретных случаях.
Подсунь проге
"двенадцать млн. шестьсот тридцать восемь тыс. сорок два"
или
"двенадцать миллионов шестьсот тридцать восемь тысяч сорок две коп"
...
Рейтинг: 0 / 0
Сумма прописью
    #39827612
Фотография Мигалка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, какое ТЗ будет так и напишем. частота вариантов написания сильно убывает. можно и "шисот" ловить и "ibcjn". 100% не будет, конечно, но явно >99. взяли текущую базу, конвертнули, посмотрели что не конвертнулось, добавили в алгоритм и вперёд.
...
Рейтинг: 0 / 0
Сумма прописью
    #39827632
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить текст в базе ?
ЗАЧЕМ ?
...
Рейтинг: 0 / 0
Сумма прописью
    #39827719
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шоб було! (с)

P.S. Неужто пятница? Смотрю в календарь.
Нет, всё-таки вторник. Всё врут календари... (с)
Володя, зачёт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сумма прописью
    #39827732
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

:)
...
Рейтинг: 0 / 0
Сумма прописью
    #39827766
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrОбратный перевод слишком трудоёмок и решаем лишь в конкретных случаях.
Подсунь проге
"двенадцать млн. шестьсот тридцать восемь тыс. сорок два"
или
"двенадцать миллионов шестьсот тридцать восемь тысяч сорок две коп"

Это решается граничными условиями. Так-то можно и так писать: "22 тысячи триста 46 руб."
...
Рейтинг: 0 / 0
Сумма прописью
    #39827770
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

ч-ты-"D" == четыре.
...
Рейтинг: 0 / 0
Сумма прописью
    #39827818
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIДок,

дай, пожалуйста, ссылку. Сразу не находится. Может пригодится. Из числа в строку востребовано. Обратная процедура как-то никогда не требовалась.
3617013
...
Рейтинг: 0 / 0
Сумма прописью
    #39827819
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или вот 3622543
...
Рейтинг: 0 / 0
Сумма прописью
    #39827828
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докили вот 3622543

Так это число в строку, а ТС надо строку в число, не?
...
Рейтинг: 0 / 0
Сумма прописью
    #39827866
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Постебаться ему надо, а не строку в число.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сумма прописью
    #39827871
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леночка, а какой у нас пароль от фай-фай? (с)
...
Рейтинг: 0 / 0
Сумма прописью
    #39828002
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpТак это число в строку, а ТС надо строку в число, не?
Я смотрел на заголовок треда, у ТС'а, оказывается, содержимое первого поста противоречит заголовку :)
...
Рейтинг: 0 / 0
Сумма прописью
    #39828070
istrebitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сумма прописью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]