currtostrf. не совсем понятный результат.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Deimos
постоялец
Сообщения: 174
Зарегистрирован: 16.01.2010 23:31:30

currtostrf. не совсем понятный результат.

Сообщение Deimos »

Доброго времени.

currtostrf(80.00,fffixed,2) формирует строку "80,00", что вполне логично...
currtostrf(79.998,fffixed,2) формирует строку "080,00" вместо "80,00", что не логично... (на мой взгляд)


никто не сталкивался?
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Может как то связано с тем что она для денежных единиц? Именно она нужна, RoundTo не подойдет?
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Sharfik писал(а):currtostrf(79.998,fffixed,2) формирует строку "080,00" вместо "80,00", что не логично... (на мой взгляд)


Логично ли задавать тысячные доли денежных единиц?
Попробуйте

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

currtostrf(79.99,fffixed,2)
Deimos
постоялец
Сообщения: 174
Зарегистрирован: 16.01.2010 23:31:30

Сообщение Deimos »

Sharfik писал(а):Может как то связано с тем что она для денежных единиц?


Именно так. Речь идет о финансовых вычислениях.


svk12 писал(а):Логично ли задавать тысячные доли


Опять-же именно так, поскольку тип currency рассчитан на 4, насколько я помню, знака после запятой, и число 79,998 является результатом финансовых вычислений в формате именно 79,998, хотя я и привел упрощенный пример, для упрощения сути вопроса. Так-же при использовании типа currency 79,99=79,99, а 79,998=80, применительно к данному примеру и исходя из использования специфики типа currency.


Но меня интересовал именно непонятный 0 в начале строки, а не применение других форматов, поскольку это всего-лишь преобразование в строку и при любых вариантах вывода должно быть 80, а не 080. Каким образом количество знаков знаков дробной части повлияло на этот-самый 080. именно в этом я и хочу разобраться.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Есть одна теория. Мне несколько раз кадровик наш говорила, чтобы я перед датой ставил нолик, если она в первых 9-ти числах. Это связано с подделкой документов. Ноль в начале не позволяет подрисовать что то, но тогда встает вопрос почему в первом варианте у тебя нет нуля. ..Зауши притянутое объяснение)))
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

Думаю баг, который сохраняет количество символов, но при этом закругляет.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

На Turbo Delphi Explorer результат одинаковый - 80.00
Аватара пользователя
ZeUsM
новенький
Сообщения: 57
Зарегистрирован: 08.11.2010 12:55:35
Откуда: Нерезиновая

Сообщение ZeUsM »

В CT 5.10 результат предсказуем оба 80,00.
Ответить