Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Вниз

Как округлить число?   Найти похожие ветки 

 
SunVit   (2002-06-11 00:37) [0]

Как округлить real число (без Round)?
Пример: 123,123
Ответ: 123,12


 
IB   (2002-06-11 01:06) [1]

function MyRound(n: Real; z: Integer) :Real;
begin
result := Int(n*IntPower(10,z))/IntPower(10,z);
end;


 
Anatoly Podgoretsky   (2002-06-11 01:30) [2]

Попробуй округлить 0,02


 
IB   (2002-06-11 01:46) [3]

MyRound(0.02,-1) = 0
MyRound(0.02,0) = 0
MyRound(0.02,1) = 0
MyRound(0.02,2) = 0.02
MyRound(0.02,3) = 0.02


 
drpass   (2002-06-11 02:02) [4]

А стандартную функцию RoundTo не проходили?


 
IB   (2002-06-11 02:09) [5]

Стандартную где?
Да и ведь сказано: без Round.


 
kaif   (2002-06-11 02:24) [6]

if frac(a) >= 0.005 then
Result := trunc(a*100)/100 + 0.01
else
Result := trunc(a*100)/100

Правда, в D3 trunc не in64 возвращает, а integer.
Поэтому в D3 это будет работать только с небольшими числами.


 
KilkennyCat   (2002-06-11 06:16) [7]

Гы... а я вот как придумал! без роунда! только код писать лень, но тема будет понятна:

Делаем сначала FloatToStr, ищем позицию запятой, копируем в новую строку с начала до одного символа после запятой, в старой строке смотрим третий символ после запятой и если его Ord() меньше чем Ord("5"), то к новой строке прибавляется символ, равный третьему после запятой символу старой строки, иначе к новой строке прибавляется сhr(inc(ord(второй символ после запятой старой строки))).
Ну и СтрТуФлот полученное

Как вам математические операции через строки и коды символов?


 
Johnmen   (2002-06-11 10:12) [8]

>kaif © (11.06.02 02:24) : Не всегда верно....:()



 
kaif   (2002-06-11 11:26) [9]

>2 Johnmen © (11.06.02 10:12)
Внимательно не смотрел. Скорее это просто идея. Если под D3 разрядности не хватит, все равно нужно будет менять алгоритм.
Можно, например, разбить на целую и дробную части:
int_part := int(a);
frac_part := frac(a);
и потом что-то предпринять по округлению (с кучей if-ов).
Пусть это длинно, но работать будет быстро (если это требуется). До сих пор не ясен мотив, почему round отвергнут. Может, это прояснило бы дело...


 
Skyle   (2002-06-11 12:28) [10]


> Гы... а я вот как придумал! без роунда! только код писать
> лень, но тема будет понятна:

и т.д...
Короче, это примерно то же самое, что микроскопом гвозди забивать... Есть гораздо более подходящие идеи по этому поводу... А это... Размах не тот...
А если тебе так нравится математические операции через строки, то попробуй посчитать 1 000 000!, может надоедят...:))))


 
Nicolas_   (2002-06-11 12:28) [11]

IB: попробуй округлить, например, 0.48 до 1 знака.

SunVit: y := (trunc((x + 0.005) * 100)) / 100


 
Johnmen   (2002-06-11 12:44) [12]

>Nicolas_ (11.06.02 12:28)
>y := (trunc((x + 0.005) * 100)) / 100

Не всегда верно....:()



 
АК-74   (2002-06-11 16:44) [13]

Учтем отбрасываемую цифру:

function MyRound(n: Real; z: Integer): Real;
var
Mult: Extended;
begin
Mult := IntPower(10,z);
result := Int((n+0.5/Mult)*Mult)/Mult;
end;


 
Johnmen   (2002-06-11 17:13) [14]

>АК-74 (11.06.02 16:44)

Не всегда верно....:()


 
АК-74   (2002-06-11 18:21) [15]

Я догадываюсь, что нет предела совершенству.
Но куда подевался автор вопроса? Ведь задача так и не ясна...
Кстати, когда неверно?


 
KilkennyCat   (2002-06-11 21:24) [16]

To Skyle :

Это ведь шутка была, хоть и работающая :)
Но в каждой шутке... Иногда такие альтернативные методы очень помогают. А вообще, я сейчас подумаю об умножении...



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.06.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
4-77700
ATLANTIDO
2002-04-21 16:48
2002.06.24
Дочерние окна


14-77581
Dimka Maslov
2002-05-20 16:08
2002.06.24
UBPFD


1-77452
kronprince
2002-06-11 18:33
2002.06.24
Про построение графиков из DataSetа


4-77688
Y_Vovan
2002-04-26 15:56
2002.06.24
Как програмно создать юзера с паролем в Win98,Nt,W2K,Xp


1-77383
Stas Ant
2002-06-13 14:09
2002.06.24
Чужая Dll не находится хотя она есть...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский