DobleToStr

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Ruh
Посетитель
Сообщения: 32
Зарегистрирован: 07 дек 2006, 11:15
Откуда: ДИТ
Контактная информация:

DobleToStr

Сообщение Ruh »

Пытаюсь вывести числа в строковом виде

Код: Выделить всё

doubleToStr('21.215','\m4 руб. \f\2p5 коп.') 
получается
двадцать один руб. двадцать два сотых коп.
то есть он, по идеи, должен писать две в женском роде, а пишет в мужском. (Пример взят из хелпа).
Есть ли какие-нибудь способы сделать окончание в женском роде?
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Doubletostr(22.225,'\m4 р. \2p\f5 к.')
Ruh
Посетитель
Сообщения: 32
Зарегистрирован: 07 дек 2006, 11:15
Откуда: ДИТ
Контактная информация:

Сообщение Ruh »

Alexander писал(а):Doubletostr(22.225,'\m4 р. \2p\f5 к.')
Тоже самое получается. Сам пробовал делать?
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

doubletostr(25,' \m4 руб.')+' '+doubletostr(21,'\f4 коп.')
Т.е. выделяешь целую часть. Потом выделяешь дробную, приводя ее к целому виду

А := 25.21 // исходное число
В := integer(A) // целая часть
C := integer((A-integer(A))*100) // дробная часть

doubletostr(B,' \m4 руб.')+' '+doubletostr(C,'\f4 коп.')
двадцать пять руб. двадцать одна коп.

или сразу
doubletostr(integer(A),'\m4 руб.')+' '+doubletostr(integer((A-integer(A))*100),'\f4 коп.')
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Ruh
у меня так все работает...
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

Alexander писал(а):Ruh
у меня так все работает...
Doubletostr(22.225,'\m4 р. \2p\f5 к.') = 'ноль р. двадцать две сотых к.'
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Doubletostr(22.225,'\m4 р. \2p\f5 к.') = 'двадцать два р. двадцать три сотых к.'
кстати пример из документации у меня тоже нормально отрабатывает,
doubleToStr('22.225','\m4 р. \f\2p5 к.') = 'двадцать два р. двадцать три сотых к.'
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

В любом случае, разве "двадцать три сотых к" это правильно? :-o
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

aleks1232321
а как по-вашему должно делаться округление? В данном примере делается округление до сотых(параметр \2р - до сотых). Так что
22.225 ~ 22.23
все правильно!
Делайте либо так:
doubleToStr(Trunc('22.225',2),'\m4 р. \f5 к.') = 'двадцать два р. двадцать две сотых к.'
либо так:
doubleToStr('22.225','\m4 р. \f4 к.') = 'двадцать два р. двадцать две к.'
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

Может оно и правильно, наверняка правильно, но вот не всегда у меня, почему-то работает такое выражение doubleToStr('22.31','\m4 р \f4 к'). Поэтому приходится изгалаяться. :o
Alexander
Местный житель
Сообщения: 248
Зарегистрирован: 28 ноя 2006, 13:29

Сообщение Alexander »

Магия!!! :-D
Бубен и барабан должны быть у каждого программиста!!! :-)
У меня вот есть, иногда помогает.... :-D
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

можно использовать функцию DoubleToString(comp,double)
где comp - nrec валюты ( 0 - для НДЕ), double - сумма
и практически всегда будет успех
dP
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

А это начиная с какой версии присутствует?
Что-то не нашел ничего похожего
dp
Местный житель
Сообщения: 216
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Беларусь, Минск
Контактная информация:

Сообщение dp »

Что-то не нашел ничего похожего
а что в какой-то версии не работает?
dP
aleks1232321
Постоянный гость
Сообщения: 86
Зарегистрирован: 28 апр 2005, 12:15
Откуда: Москва

Сообщение aleks1232321 »

1.2.6. Функция DoubleToStr (Double, String) : String
Назначение
Преобразование числа в строку с учетом формата. Форматный перевод вещественных чисел в строку в основном используется для вывода результатов, связанных с деньгами.
Описание
function DoubleToStr (Num : Double, Format : String) : String;
Параметры
Num : Double - число, которое необходимо преобразовать в строку.
Format : String - формат.
Ответить