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

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

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

...

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

блестяще!
...
Рейтинг: 0 / 0
17.06.2019, 17:20
    #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
17.06.2019, 19:20
    #39827442
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма прописью
ёёёёёблестяще!
учись, студент!©


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

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

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

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

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

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

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

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


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