Форум » [x]Harbour » Функция перевода числа в слово "Одна тысяча двести пятьдесят..." » Ответить

Функция перевода числа в слово "Одна тысяча двести пятьдесят..."

Softlog86: Подскажите функцию перевода числа в слово (предложение) например 1250 = "Одна тысяча двести пятьдесят..." и так далее .... И заодно - как посоветуете реализовать показ больших чисел (деньги) в таблицах и LABEL : 2500000 наподобие 2.500.000 или 2'500'000

Ответов - 5

Sergy: По первой части - выложу вечером функцию, которая работает лет 15. По второй - для этого существует TRANSFORM() с времен Clipper S'87

Pasha: См. модуль harbour\contrib\hbmisc\numtxtru.prg, функция NumToTxtRU

Andrey: Pasha пишет: См. модуль harbour\contrib\hbmisc\numtxtru.prg, функция NumToTxtRU Блин, а я тоже не знал что есть уже готовая функция вв Харборе. Спасибо БОЛЬШОЕ !


Softlog86: Интуитивно мог догадаться .... NumToTxtRU :) , правда без 'RU' ..... По второму вопросу - дополняю : Есть сумма , например : 2 500 300 р . Хочу чтоб выводилось как 2'500'300 р Учитывать нужно что число знаков может быть от 1 до 10 .... и чтоб лишние апострофы не выводились ....

Pasha: Function StrBlankC(nSum, nLen, nDec, lS) Local c := Str(nSum, nLen, nDec), cRet := '', cDec, ser, s1 if nDec > 0 cDec := Right(c, nDec + 1) c := Left(c, len(c) - nDec - 1) endif ser := len(c) while ser > 0 s1 = min(ser, 3) cRet = Right(c, s1) + cRet ser -= s1 c = left(c, ser) if ser > 0 cRet = if(Empty(c), ' ', "'") + cRet endif enddo if nDec > 0 cRet += cDec endif if nSum == 0 .and. lS == nil cRet = space(len(cRet)) endif Return cRet



полная версия страницы