powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Масса прописью
7 сообщений из 7, страница 1 из 1
Масса прописью
    #40012977
IgorKaratagro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток,

Есть готовый код(см. ниже) для Google Sheets для перевода числа в текст(отображает "ххххххххх гривень хх копійок")
Возможно ли его поправить, чтобы он отображал не деньги, а массу ("ХХХХ тон ХХХ кг") с тремя знаками в килограммах?
Например: ввожу 10,1 - выводит "десять тон 100 кг" (т.е. то же самое, что и по валюте тонны буквами, килограммы 3- х значными цифрами), учитывая, что 10,010 - десять тон 010 кг; 10,001 - десять тон 001 кг).
Килограммы склонять не требуется(просто "кг.")

Извините, если вопрос тупой, но совсем нет времени учить java.
Заранее благодарен,
Да прибудет с вами сила.


Код
Код: vbnet
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.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
var mapNumbers = {
        0 : [2, 1, "нуль"], 
        1 : [0, 2, "один", "одна"], 
        2 : [1, 2, "два", "дві"], 
        3 : [1, 1, "три"], 
        4 : [1, 1, "чотири"], 
        5 : [2, 1, "п'ять"], 
        6 : [2, 1, "шість"], 
        7 : [2, 1, "сім"], 
        8 : [2, 1, "вісім"], 
        9 : [2, 1, "дев'ять"], 
        10 : [2, 1, "десять"], 
        11 : [2, 1, "одинадцять"], 
        12 : [2, 1, "дванадцять"], 
        13 : [2, 1, "тринадцять"], 
        14 : [2, 1, "чотирнадцять"], 
        15 : [2, 1, "п'ятнадцять"], 
        16 : [2, 1, "шістнадцять"], 
        17 : [2, 1, "сімнадцять"], 
        18 : [2, 1, "вісімнадцять"], 
        19 : [2, 1, "дев'ятнадцять"],
        20 : [2, 1, "двадцять"],
        30 : [2, 1, "тридцять"],
        40 : [2, 1, "сорок"],
        50 : [2, 1, "п'ятдесят"],
        60 : [2, 1, "шістдесят"],
        70 : [2, 1, "сімдесят"],
        80 : [2, 1, "вісімдесят"],
        90 : [2, 1, "дев'яносто"],
        100 : [2, 1, "сто"],
        200 : [2, 1, "двісті"],
        300 : [2, 1, "триста"],
        400 : [2, 1, "чотириста"],
        500 : [2, 1, "п'ятсот"],
        600 : [2, 1, "шістсот"],
        700 : [2, 1, "сімсот"],
        800 : [2, 1, "вісімсот"],
        900 : [2, 1, "дев'ятсот"]
    };

    var mapOrders = [ 
        { _Gender : false, _arrStates : ["гривня", "гривні", "гривень"], _bAddZeroWord : true }, 
        { _Gender : false, _arrStates : ["тисяча", "тисячі", "тисяч"] }, 
        { _Gender : true, _arrStates : ["мільйон", "мільйона", "мільйонів"] }, 
        { _Gender : true, _arrStates : ["мільярд", "мільярда", "мільярдів"] }, 
        { _Gender : true, _arrStates : ["трильйон", "трильйона", "трильйонів"] }
    ];

    var objKop = { _Gender : false, _arrStates : ["копійка", "копійки", "копійок"] };

    function Value(dVal, bGender) {
        var xVal = mapNumbers[dVal];
        if (xVal[1] == 1) {
            return xVal[2];
        } else {
            return xVal[2 + (bGender ? 0 : 1)];
        }
    }

    function From0To999(fValue, oObjDesc, fnAddNum, fnAddDesc)
    {
        var nCurrState = 2;
        if (Math.floor(fValue/100) > 0) {
            var fCurr = Math.floor(fValue/100)*100;
            fnAddNum(Value(fCurr, oObjDesc._Gender));
            nCurrState = mapNumbers[fCurr][0];
            fValue -= fCurr;
        }

        if (fValue < 20) { if (Math.floor(fValue) > 0 || (oObjDesc._bAddZeroWord)) {
                fnAddNum(Value(fValue, oObjDesc._Gender));
                nCurrState = mapNumbers[fValue][0];
            }
        } else {
            var fCurr = Math.floor(fValue/10)*10;
            fnAddNum(Value(fCurr, oObjDesc._Gender));
            nCurrState = mapNumbers[fCurr][0];
            fValue -= fCurr;
            
            if (Math.floor(fValue) > 0) {
                fnAddNum(Value(fValue, oObjDesc._Gender));
                nCurrState = mapNumbers[fValue][0];
            }
        }

        fnAddDesc(oObjDesc._arrStates[nCurrState]);
    }

    function number_to_string(fAmount)
    {
        var fInt = Math.floor(fAmount + 0.005);
        var fDec = Math.floor(((fAmount - fInt) * 100) + 0.5);

        var arrRet = [];
        var iOrder = 0;
        var arrSouthands = [];
        for (; fInt > 0.9999; fInt/=1000) {
            arrSouthands.push(Math.floor(fInt % 1000));
        }
        if (arrSouthands.length == 0) {
            arrSouthands.push(0);
        }

        function PushToRes(strVal) { 
            arrRet.push(strVal); 
        }
    for (var iSouth = arrSouthands.length-1; iSouth >= 0; --iSouth) {
        if (arrSouthands[iSouth] == 0) {
            continue;
        }
        From0To999(arrSouthands[iSouth], mapOrders[iSouth], PushToRes, PushToRes);
    }

    if (arrSouthands[0] == 0) {
        //  Handle zero amount
        if (arrSouthands.length == 1) {
            PushToRes(Value(0, mapOrders[0]._Gender));
        }

        var nCurrState = 2;
        PushToRes(mapOrders[0]._arrStates[nCurrState]);
    }

    if (arrRet.length > 0) {
        // Capitalize first letter
        arrRet[0] = arrRet[0].match(/^(.)/)[1].toLocaleUpperCase() + arrRet[0].match(/^.(.*)$/)[1];
    }

    arrRet.push((fDec < 10) ? ("0" + fDec) : ("" + fDec));
    From0To999(fDec, objKop, function() {}, PushToRes);

    return arrRet.join(" ");
    }


Модератор: Код надо выделять тэгом [ SRC ] и большие портянки убирать под спойлер
...
Рейтинг: 0 / 0
Масса прописью
    #40012993
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Масса прописью
    #40013005
IgorKaratagro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Учитывая то, что "великие" программисты не пошевелятся, чтобы поправить пару строк уже рабочего кода, перефразирую вопрос:

Написал код (сам, б#я буду), он работает и выдаёт только 2 цифры после запятой. Подскажите в какой части кода править, чтобы выдавало 3 цифры после запятой, учитывая, что если 1,1 - "одна целая 100 дробных"; 1,01 - "одна целая 010 дробных"; 1,001 - "одна целая 001 дробных".
Если есть где то объяснение, дайте ссылку, с удовольствием поправлю сам.

Если сможет кто то поправить сам - буду признателен.
...
Рейтинг: 0 / 0
Масса прописью
    #40013014
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IgorKaratagro
совсем нет времени учить java.

IgorKaratagro
Написал код (сам ...

Не учил как писать и сам написал? Гений!

В форум работа пиши, за умеренную плату помогут.
...
Рейтинг: 0 / 0
Масса прописью
    #40013015
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например: ввожу 10,1 - выводит "десять тон 100 кг"
Поскольку сумма прописью это уже тыщу раз решенная задача. Ты можешь не давать клятвы
а просто взять готовый алгоритм. Для денег например.

Если функция называется sumInWords() тогда ты дополняешь 10,1 незначащими нулями до 10,100
и делаешь дважды применение функции для левой части и правой. И форматируешь.

Код: sql
1.
sumInWords(10) + " т " + sumInWords(100) + " кг"
...
Рейтинг: 0 / 0
Масса прописью
    #40013026
IgorKaratagro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Благодарю, добрый человек за подсказку.
Если позволите, еще маленький вопрос:
Возможно ли в самом коде заменить пару параметров, чтобы код выдавал прописью 3 знака дробного числа или это надо менять код целиком или значительную его часть? Если да, то с каким параметром в коде мне работать? Не прошу сделать всё за меня, просто подскажите где копать?
...
Рейтинг: 0 / 0
Масса прописью
    #40013030
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если честно я не смотрел твой код.

Сделай 2 варианта кода. Для 2х знаков после запятой и для трех. Покажи в форум и я думаю мы придумаем как генерализировать.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Масса прописью
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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