Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.05.2013, 11:46
delphi_begin delphi_begin вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 22
Репутация: 10
По умолчанию Округление через SimpleRoundTo

Привет, товарищи! Столкнулся с проблемой при округлении денег!

В общем-то, все просто summa:=SimpleRoundTo(n,-2);

Все бы хорошо, НО! Если n=14.402, например, то на выходе получим 14.4.

Что для математики правильно, а вот для валюты есть разница: 4 цента или 40 центов))

Не подскажите, как решить такую проблемку?

Спасибо всем, кто неравнодушен!!
Ответить с цитированием
  #2  
Старый 21.05.2013, 12:10
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Код:
uses math;
...
summa:= RoundTo(14.402, -1); //  = 14.40
...
Ответить с цитированием
  #3  
Старый 21.05.2013, 12:15
delphi_begin delphi_begin вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 22
Репутация: 10
По умолчанию

а вот и нет(( по прежнему 14.4
Ответить с цитированием
  #4  
Старый 21.05.2013, 12:16
delphi_begin delphi_begin вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 22
Репутация: 10
По умолчанию

может быть есть какая-то опция, которой указывается обрезать ноль в дробной части или нет?
Ответить с цитированием
  #5  
Старый 21.05.2013, 12:21
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от delphi_begin
может быть есть какая-то опция, которой указывается обрезать ноль в дробной части или нет?
Тебе что, в большую сторону нужно округлять?
Если так, то используй функцию SetRoundMode.
Пример:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetRoundMode(rmUp);
  ShowMessage(FloatToStr(RoundTo(14.402, -2)));
end;
p.s. Не забывай только потом возвращать режим округления назад.
Ответить с цитированием
  #6  
Старый 21.05.2013, 12:26
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от delphi_begin
а вот и нет(( по прежнему 14.4
В математике 14.4 и 14.40 одно и то же, как и в деньгах. 4 цента будет писаться 14.04, учите математику - пригодится.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
delphi_begin (21.05.2013)
  #7  
Старый 21.05.2013, 12:27
delphi_begin delphi_begin вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 22
Репутация: 10
По умолчанию

нет. Округляется все правильно!

Мне просто нужно, чтобы ноль на конце не обрезался.

Т.е. 14.402 до двух знаков =14.40 - это правильно!

Но функция выдает 14.4. Что тоже верно, но не для денег!

Как заставить не убирать ноль на конце, что возвращалось 14.40 ??

Потому что в центах 14.4 и 14.40 - две разные суммы
Ответить с цитированием
  #8  
Старый 21.05.2013, 12:28
delphi_begin delphi_begin вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 22
Репутация: 10
По умолчанию

Это понятно. Но мне нужно именно в виде 14.40. Потому что я не знаю какая сумма будет округляться. 14.351 или 14.402
Ответить с цитированием
  #9  
Старый 21.05.2013, 12:31
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от delphi_begin
нет. Округляется все правильно!

Мне просто нужно, чтобы ноль на конце не обрезался.

Т.е. 14.402 до двух знаков =14.40 - это правильно!

Но функция выдает 14.4. Что тоже верно, но не для денег!

Как заставить не убирать ноль на конце, что возвращалось 14.40 ??

Потому что в центах 14.4 и 14.40 - две разные суммы
У тебя какие-то превратные взгляды на дроби. Ты не поверишь, но "14.4" и "14.40" это абсолютно одинаковые значения, и не только с точки зрения математики, а с любой. Т.е. 14.4 это 14 долларов 40 центов, а вовсе не 4 цента как ты думаешь. А чтобы 0 в конце отображался используй процедуры форматирования, например Format.
Ответить с цитированием
  #10  
Старый 21.05.2013, 12:32
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Воспользуйтесь функцией FloatToStrF.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 21.05.2013, 12:43
delphi_begin delphi_begin вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
У тебя какие-то превратные взгляды на дроби. Ты не поверишь, но "14.4" и "14.40" это абсолютно одинаковые значения, и не только с точки зрения математики, а с любой. Т.е. 14.4 это 14 долларов 40 центов, а вовсе не 4 цента как ты думаешь. А чтобы 0 в конце отображался используй процедуры форматирования, например Format.

Можете привести пример?
Ответить с цитированием
  #12  
Старый 21.05.2013, 12:51
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от delphi_begin
Можете привести пример?
Пример:
Код:
ShowMessage(Format('%.2f', [14.402]));
Ответить с цитированием
  #13  
Старый 21.05.2013, 13:41
delphi_begin delphi_begin вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 22
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Пример:
Код:
ShowMessage(Format('%.2f', [14.402]));
Воооот! то, что и было нужно! Мне именно вывод нужно было получить такой!
Спасибо большое за помощь!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter