Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Округление числа 
:(
    Опции темы
Dron84
Дата 4.10.2005, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 11.9.2005
Где: Россия

Репутация: нет
Всего: 1



Как сделать округление числа до определённого знака после запятой не использую модуль Math
PM MAIL   Вверх
mvdr
Дата 4.10.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


физик
***


Профиль
Группа: Участник
Сообщений: 1349
Регистрация: 31.12.2004
Где: Волгоград, Россия

Репутация: 1
Всего: 42



Если степень округления задается пользователем, то преобразуем в строку, потом смотрим на следующей за округляемой цифру, если она больше 5, то последнюю цифру увеличиваем на 1.


--------------------
Появляюсь редко, но часто метко

Изображать идиота сложнее, чем изображать умного: полезнее и не каждому дано
PM ICQ   Вверх
Alex
Дата 4.10.2005, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Цитата(Dron84 @ 4.10.2005, 20:18)
Как сделать округление числа до определённого знака после запятой не использую модуль Math

Вам это число нужно только для отображения или дальше для расчетов?
Добавлено @ 23:13
Если для отображения, то округление до 2-х знаков делается так:
Код

FormatFloat('0.00', 1.5457987874)

Добавлено @ 23:15
В принцыпе можно так и округленное число получить:
Код

StrToFloat(FormatFloat('0.00', 1.5457987874))



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Mayk
Дата 5.10.2005, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: нет
Всего: 134



Цитата(Dron84 @ 4.10.2005, 23:18)
Как сделать округление числа до определённого знака после запятой не использую модуль Math

домножить на 10 в степени X, преобразовать в интегер(или воспользоваться cell, что было бы лучше - не уверен что он не из math'а), разделить на 10 в степени X.
Получится число до Х знака.
зы. Народ, откуда такая любовь к строкам? Они же медленные как черепахи.

Это сообщение отредактировал(а) Mayk - 5.10.2005, 07:57


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Satana
Дата 5.10.2005, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 564
Регистрация: 15.9.2004
Где: Ставрополь, СЗ ра йон

Репутация: 1
Всего: 5



Код

function RoundEx(X: Double; Precision: Integer): Double;
{Precision : 1 - до целых, 10 - до десятых, 100 - до сотых...}
var
  ScaledFractPart, Temp: Double;
begin
  ScaledFractPart := Frac(X) * Precision;
  Temp := Frac(ScaledFractPart);
  ScaledFractPart := Int(ScaledFractPart);
  if Temp >= 0.5 then ScaledFractPart := ScaledFractPart + 1;
  if Temp <= -0.5 then ScaledFractPart := ScaledFractPart - 1;
  RoundEx := Int(X) + ScaledFractPart / Precision;
end;



--------------------
 Работай на себя 
www.abalentsev.com - Сайт портфолио.
www.pokushau.ru - Рецепты со всего мира.
PM MAIL WWW ICQ   Вверх
x77
Дата 5.10.2005, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



вот так это реализовано в Math:
Код

function IntPower(const Base: Extended; const Exponent: Integer): Extended;
asm
        mov     ecx, eax
        cdq
        fld1                      { Result := 1 }
        xor     eax, edx
        sub     eax, edx          { eax := Abs(Exponent) }
        jz      @@3
        fld     Base
        jmp     @@2
@@1:    fmul    ST, ST            { X := Base * Base }
@@2:    shr     eax,1
        jnc     @@1
        fmul    ST(1),ST          { Result := Result * X }
        jnz     @@1
        fstp    st                { pop X from FPU stack }
        cmp     ecx, 0
        jge     @@3
        fld1
        fdivrp                    { Result := 1 / Result }
@@3:
        fwait
end;

function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
var
  LFactor: Double;
begin
  LFactor := IntPower(10, ADigit);
  Result := Round(AValue / LFactor) * LFactor;
end;


кто мешает скопировать к себе две эти функции, если уж неохота цеплять всю библиотеку?


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Dron84
Дата 12.10.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 11.9.2005
Где: Россия

Репутация: нет
Всего: 1



как сделать, так чтобы она округляла в меньшую сторону(бухгалтерское округление)?
PM MAIL   Вверх
Cashey
Дата 12.10.2005, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Цитата(Dron84 @ 12.10.2005, 19:30)
как сделать, так чтобы она округляла в меньшую сторону(бухгалтерское округление)?

отрезать дробную часть smile


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
Dron84
Дата 12.10.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 11.9.2005
Где: Россия

Репутация: нет
Всего: 1



Cashey
а можно пример
PM MAIL   Вверх
Dimannn
Дата 12.10.2005, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

Репутация: нет
Всего: 1



Цитата(Cashey @ 12.10.2005, 20:26)
отрезать дробную часть

Это в меньшую. А в боььшую - прибавить ещё 0.001 или солько там нулей надо


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
Dron84
Дата 12.10.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 11.9.2005
Где: Россия

Репутация: нет
Всего: 1



Cashey
Цитата
отрезать дробную часть


это что ж получается, вот у такого кода
Код

MyRound(1.235,2) = 1.23

будет единица
PM MAIL   Вверх
Cashey
Дата 12.10.2005, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 2
Всего: 60



Dron84ну а разве не это надо?
можно с преобразованием в строку. дельфи сейчас нет под рукой, потому с примером точным не подсоблю, но что-то типа такого:
leftstr(realtostr(1.23), lenstr(realtostr(1.23)-3))
я на паскале давно не писал, потому точное написание функций уже позабыл


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
~FoX~
Дата 13.10.2005, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



А чем Currency не устраивает...???


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Dimannn
Дата 13.10.2005, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 14.4.2005
Где: Владимир

Репутация: нет
Всего: 1



Цитата
А чем Currency не устраивает...???


Я так понимаю, человетку алгоритм нужен, а не ответ.
Иначе чё и Math мучаться?


--------------------
Хотите быстро и без проблем опубликовать вашу программу в сети за 5 минут?
Тогда потратьте пару минут чтобы посмотреть, что предлагает OpenProject.org.ru
PM MAIL ICQ   Вверх
Dron84
Дата 13.10.2005, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 11.9.2005
Где: Россия

Репутация: нет
Всего: 1



Цитата

Я так понимаю, человетку алгоритм нужен, а не ответ.
Иначе чё и Math мучаться?

правильно заметил!!!
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.