Перейти к содержимому


Цифры прописью


Сообщений в теме: 19

#1 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 07 Февраль 2013 - 11:51

Есть в таблице 2 поля: "значение" и "значение прописью"
значения дробные 1 или 2 знака после запятой, надо что бы в поле "значение прописью" указанное значение попадало прописью

Пример

1,75
одна целая семьдесят пять сотых

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Февраль 2013 - 09:41

Уж много раз ведь писали на эту тему на форуме. Старайтесь использовать поиск, прежде чем новую тему создавать.

Если вывод прописью должен быть в шаблоне, то: http://clientbase.ru...?showtopic=2564

Если нужно вычисление, то по аналогии:
$line['Значение прописью'] = num2str($line['Значение'], "none", "none", 0);


#3 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 11 Февраль 2013 - 16:10

Прописываю условие: $line['Минимальная сумма комиссии прописью'] = num2str($line['Минимальная сумма комиссии'], "none", "none", 0);
Тип поля "Минимальная сумма комиссии" = число, Число знаков всего / после запятой: 10/2

вношу значение 2.5 прописью пишет "два"??????

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 11 Февраль 2013 - 16:35

Да, действительно, параметр "none" в "копейках", оказывается, убирает их совсем. Кроме того, дробная часть выводится только в виде цифр, т.к. функция писалась под пропись денежных сумм. Поэтому в вашем случае целую и дробную часть необходимо выводить отдельно:

list ($int, $frac) = explode(".", $line['Значение']);
$line['Значение прописью'] = num2str($int, "целых", "none", 0)." ".num2str($frac, "сотых", "none", 0);


#5 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 11 Февраль 2013 - 21:09

Просмотр сообщенияCbCoder (11 Февраль 2013 - 16:35) писал:

Да, действительно, параметр "none" в "копейках", оказывается, убирает их совсем, не знал про это. Кроме того, дробная часть выводится только в виде цифр, т.к. функция писалась под пропись денежных сумм. Поэтому в вашем случае целую и дробную часть необходимо выводить отдельно:

list ($int, $frac) = explode(".", $line['Значение']);
$line['Значение прописью'] = num2str($int, "целых", "none", 0)." ".num2str($frac, "сотых", "none", 0);
Вот, за это спасибо! Я это и имел ввиду, только вот если написать 2.5, то пишет не "два целых пять сотых", а не "пять десятых"
Подскажете как поправить?

#6 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 11 Февраль 2013 - 21:11

Просмотр сообщенияRezo (11 Февраль 2013 - 21:09) писал:

Вот, за это спасибо! Я это и имел ввиду, только вот если написать 2.5, то пишет не "два целых пять сотых", а не "пять десятых"
Подскажете как поправить?
А можно ли еще, что бы писала не "два целых два сотых", а "две целых две сотых"

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 12 Февраль 2013 - 09:13

Просмотр сообщенияRezo (11 Февраль 2013 - 21:09) писал:

только вот если написать 2.5, то пишет не "два целых пять сотых", а не "пять десятых"
Подскажете как поправить?

По идее, если у вас в поле указано 2 знака после запятой, то должно выводится 2.50, и соответственно, "два целых пятьдесят сотых". Если же вы берете исходное значение не из поля, то можно принудительно привести число к нужному формату: $num = number_format($num, 2), где 2 - число знаков после запятой.

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 12 Февраль 2013 - 09:22

Просмотр сообщенияRezo (11 Февраль 2013 - 21:11) писал:

А можно ли еще, что бы писала не "два целых два сотых", а "две целых две сотых"

Можно, зайдите в файл include/propis.php и замените в строке 251 ноль на единицу. Или дождитесь выхода новой ревизии, где добавим еще один параметр в функцию num2str для установки женского рода склонения.

В итоге будет такой код:

list ($int, $frac) = explode(".", $line['Значение']);
$line['Значение прописью'] = num2str($int, "целых", "none", 0, 1)." ".num2str($frac, "сотых", "none", 0, 1); // последняя единица устанавливает женское склонение числительных


#9 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 13 Февраль 2013 - 11:29

Просмотр сообщенияCbCoder (12 Февраль 2013 - 09:22) писал:

Можно, зайдите в файл include/propis.php и замените в строке 251 ноль на единицу. Или дождитесь выхода новой ревизии, где добавим еще один параметр в функцию num2str для установки женского рода склонения.

В итоге будет такой код:

list ($int, $frac) = explode(".", $line['Значение']);
$line['Значение прописью'] = num2str($int, "целых", "none", 0, 1)." ".num2str($frac, "сотых", "none", 0, 1); // последняя единица устанавливает женское склонение числительных
Большое спасибо, за советы!

#10 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 18 Февраль 2013 - 11:54

Просьба помочь еще в одной ситуации:

Есть 2 поля: Минимальный ПВ и Минимальный ПВ прописью

Поле Минимальный ПВ вычисляем по формуле:


$k = $line['Максимальная сумма по договору'];
$l = $line['Минимальный ПВ в %'];
$l= $l / 100;
$k = $k * $l / (1-$l);
$k = round($k, -5);
$line['Минимальный ПВ'] = $k;

Как итог например имеем цифру 1000000.

Поле Минимальный ПВ прописью вычисляю по формуле


$line['Минимальный ПВ прописью'] = num2str($line['Минимальный ПВ'], "none", "none", 0);

Итогом выдает: "девятьсот девяносто девять тысяч девятьсот девяносто девять"

Почему понять не могу???
Может кто знает? Думаю, что это из-за округления, но не пойму как влияет

#11 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2013 - 13:36

А вы пробовали вывести значение $line['Минимальный ПВ'] без прописи? что выдает?

Протестировал сейчас num2str(1000000, "none", "none", 0) - выдает "один миллион", без каких-либо округлений. Скорее всего пропись тут не причем, суть в ваших вычислениях.

#12 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 18 Февраль 2013 - 15:07

Просмотр сообщенияCbCoder (18 Февраль 2013 - 13:36) писал:

А вы пробовали вывести значение $line['Минимальный ПВ'] без прописи? что выдает?

Все то в том и дело, что значение $line['Минимальный ПВ'] без прописи выдает 1000000

#13 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 18 Февраль 2013 - 15:08

Просмотр сообщенияRezo (18 Февраль 2013 - 15:07) писал:

Все то в том и дело, что значение [/size]$line['Минимальный ПВ'] без прописи выдает 1000000


#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2013 - 15:11

Проверьте следующие 2 варианта и отпишитесь о результатах:
  • $line['Минимальный ПВ прописью'] = $line['Минимальный ПВ']; // проверяем вывод поля без прописи
  • $line['Минимальный ПВ прописью'] = num2str(1000000, "none", "none", 0); // проверяем непосредственный вывод числа прописью


#15 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2013 - 15:13

Да, и тип поля $line['Минимальный ПВ'] какой? Лучше скриншотом.

#16 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 18 Февраль 2013 - 15:34

Просмотр сообщенияCbCoder (18 Февраль 2013 - 15:13) писал:

Да, и тип поля $line['Минимальный ПВ'] какой? Лучше скриншотом.
Проверяю: $line['Минимальный ПВ прописью'] = $line['Минимальный ПВ'] = выдает 1000000,
$line['Минимальный ПВ прописью'] = num2str(1000000, "none", "none", 0); - выдает один миллио
Создал доп поле назвал его "1", сделал следующее:
$line['Минимальный ПВ прописью'] = $line['Минимальный Затем
Затем $line[1'] = num2str($line['Минимальный ПВ прописью'], "none", "none", 0);, выдает "один миллион" - чудеса!

#17 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 18 Февраль 2013 - 15:34

Просмотр сообщенияRezo (18 Февраль 2013 - 15:34) писал:

Проверяю: $line['Минимальный ПВ прописью'] = $line['Минимальный ПВ'] = выдает 1000000,
$line['Минимальный ПВ прописью'] = num2str(1000000, "none", "none", 0); - выдает один миллио
Создал доп поле назвал его "1", сделал следующее:
$line['Минимальный ПВ прописью'] = $line['Минимальный Затем
Затем $line[1'] = num2str($line['Минимальный ПВ прописью'], "none", "none", 0);, выдает "один миллион" - чудеса!
Поля числовые в числовом формате

#18 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2013 - 15:41

Возможно, поле "Минимальный ПВ прописью" перезаписывается где-то другим значением. Как вы сами убедились, приведенное выше вычисление работает корректно.

#19 Rezo

    Активный участник

  • Пользователи
  • PipPipPip
  • 122 сообщений

Отправлено 18 Февраль 2013 - 17:24

Просмотр сообщенияCbCoder (18 Февраль 2013 - 15:13) писал:

Да, и тип поля $line['Минимальный ПВ'] какой? Лучше скриншотом.
Все-таки проблема в функции $k = round($k, -5); , если вместо -5 ставлю -4, то все ок.
Оч странно??


#20 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Февраль 2013 - 17:31

Ничего не могу сказать по этому поводу, наверное это к разработчикам PHP...





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных