Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизОкругление? Round() кто как делает? Найти похожие ветки
← →
Vadim S (2003-10-23 12:10) [0]Как оптимально решить проблему округления.
У меня D5
пишет , что Round(4.5)=4;
вернее Round(36*12.5/100)=4;
хотя должно быть 5!.
← →
Anatoly Podgoretsky (2003-10-23 12:21) [1]Это ты решил, что должно быть 5, тогда делай свою реализацию функции.
← →
Vadim S (2003-10-23 12:41) [2]Разве нет?
Excel тоже так думает.
← →
Юрий Зотов (2003-10-23 12:45) [3]> Vadim S (23.10.03 12:10)
Читайте сначала здесь:
http://www.delphikingdom.ru/helloworld/reals.htm
а потом про так наз. "бухгалтерское округление".
← →
_Narayan_ (2003-10-23 12:48) [4]Как это не странно, но мой калькулятор тоже думает что 4.5
← →
Vorobyev Sergey (2003-10-23 12:52) [5]round(4.5)=4
round(5.5)=6
round(6.5)=6
round(7.5)=8
в хелпе по Round написано, что он округляет результат всегда до четного значения
А вообще про такие "чудеса" и фокусы можно прочитать здесь
http://www.delphikingdom.ru/helloworld/miracles.htm
← →
Vorobyev Sergey (2003-10-23 12:54) [6]
> в хелпе по Round написано, что он округляет результат всегда
> до четного значения
поправка: .. если число "половинное"
← →
icWasya (2003-10-23 13:04) [7]из документации по 08xx87
режимы округления -
к нулю
к плюс бесконечности
к минус бесконечности
к чётному -- ???
← →
Александр из Минска (2003-10-23 16:52) [8]ЕСТЬ СУПЕР ЮНИТ Math, в котором есть функция ( да там просто куча олезных функций) RoundTO
Найди файл dlx1clx.hlp и найди там модуль Math, а потом уже найдешь все его возможности и описание на эту функцию!!!
← →
Александр из Минска (2003-10-23 16:57) [9]У кого хелпа нету:
Rounds a floating-point value to a specified digit or power of ten using “Banker’s rounding”.
Unit
Math
Category
Arithmetic routines
type TRoundToRange = -37..37;
function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double;
Description
Call RoundTo to round AValue to a specified power of ten.
AValue is the value to round.
ADigit indicates the power of ten to which you want AValue rounded. It can be any value from –
37 to 37 (inclusive).
RoundTo uses “Banker’s Rounding” to determine how to round values that are exactly midway between the two values that have the desired number of significant digits. This method rounds to an even number in the case that AValue is not nearer to either value.
The following examples illustrate the use of RoundTo:
Expression Value
RoundTo(1234567, 3) 1234000
RoundTo(1.234, -2) 1.23
RoundTo(1.235, -2) 1.24
RoundTo(1.245, -2) 1.24
Note: The behavior of RoundTo can be affected by the Set8087CW procedure or SetRoundMode function.
← →
Александр из Минска (2003-10-23 16:58) [10]Пардон! Это вашу проблему никак не решает:(((
← →
Александр из Минска (2003-10-23 17:01) [11]Еще раз извиняюсь, но у меня все в норме (не так как в хелпе) RoundTo(1234567, 3) = 1235000
Там еще что-то настраивать надо...
← →
}{enon (2003-10-23 17:19) [12]Можно попробовать так:
RoundValue := Trunc(Value+0.5);
Результат получается такой, как требуется.
← →
Vadim S (2003-10-31 12:15) [13]А еще есть функция
function Ceil(X: Extended):Integer;
так у нее вроде тоже все правильно.
← →
sniknik (2003-10-31 12:36) [14]можно так
Set8087CW($1B72); //математическое округление
Round(X);
Set8087CW($1372); //вернуть взад, а то бухгалтер удавится :о))
← →
Anatoly Podgoretsky (2003-10-31 12:44) [15]}{enon © (23.10.03 17:19) [12]
Нука округли -0.7
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c