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

Вниз

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

 
Ahmad   (2002-08-21 22:03) [0]

Как округлать числа в Delphi?
Если допустим стринг перевести в реал и разделить на дробное число, то в числе появляюстся много знаков после зяпятой может кто подсказать как этого избежать?


 
Jeer   (2002-08-21 22:08) [1]

Не переводить и не делить.


 
AL2002   (2002-08-21 22:11) [2]

Round F1

Блин, почему на мой вопрос никто не хочет ответить?


 
IronHawk   (2002-08-21 22:16) [3]

http://delphibase.endimus.com
Там про это много чего есть ....


 
MBo   (2002-08-22 06:53) [4]

если это нужно для вывода, то см. Format, FormatFLoat и т.д.


 
Sam Stone   (2002-08-22 08:55) [5]

выводить переменную в виде FloatValue:x:y,
где х - число цифр в числе, у - число цифр после запятой. По крайней мере перевод из флоата в стринг(если самому написать FloatToStr) реаизовать можно так:
function FloatToStr(value:extended):string;
var temp:string;
begin
str(value:5:5,temp);
FloatToStr:=Temp;
End;
Если не ставить после Value :5:5, то строка будет в виде х,ххх+хЕ


 
c102011   (2002-08-22 12:04) [6]

Модуль округления чисел до требуемой точности после запятой
(модуль необходимо подключить в раздел uses формы)

unit Rounds;

interface

uses
SysUtils, Math;

Function RoundF(Value: Double; Precision:Integer):Double;

implementation

Function RoundF (Value:Double; Precision:Integer):Double;
var
N :String[1];
S, K :Integer;
begin
IF Value<0 Then
K:=-1
ELSE
K:=1;

Value:=Value*K;
S:=ROUND(Power(10, Precision));
N:= Copy(FloatToStr(Frac(Value)),Precision+3, 1);

IF N>="5" Then
Result:= (Trunc(Value*S)+1)/S*K
ELSE
Result:= ROUND(Value*S)/S*K;
end;

end.

{----------------------------------------------------------------
Пример округления до 3-х знаков после запятой:
Value:число или выражение типа TFloat

Вычисляемое поле POLE1 таблицы Table1
Table1POLE1.value:=RoundF(Value, 3)
Функция только округляет числа, не форматируя их вывод. Т.е. незначащие нули не отображаются. Для форматирования вывода можно использовать процедуру FormatFloat (возвращает строку).

Пример округления с форматированием:
POLE1:числовое поле

Table1POLE1.AsVariant:=FormatFloat(‘0.000’, RoundF(Table2POLE2.value, 3))

Edit1.Text:=FormatFloat(‘0.000’, RoundF(Table2POLE2.value, 3))
----------------------------------------------------------------}
этот модуль пришлось написать из-за того что делфи работает с плавающей запятой и не всегда можно получить один и тот же результат при делениии и округлении, например 2-х пар чисел, результат деления которых арифметически одинаков


 
Вшсл   (2002-08-22 21:18) [7]

To 102011 >> Просвети, либо дай ссылочку на инфу, насчет того что очевидное:

function Round3(Value:Double):Double;
begin
Result:=Round(Value*1000)/1000;
end; -

хуже предложенного тобой. :-)



 
SI-riuss   (2002-08-24 02:04) [8]

Все просто. Ты дели не знаком "/" а функцией "div".
Пример:
a/b=c - получишь дробное число
a div b = c - получишь округленное до целого число


 
Ahmad   (2002-08-24 04:38) [9]

БОЛЬШОЕ ВСЕМ СПАСИБО!
НА ОСНОВЕ ВАШИХ ОТВЕТОВ МНЕ УДАЛОСЬ СОЗДАТЬ НЕСКОЛЬКО ДОРАБОТАННЫЙ TEdit, ЕДИНСТВЕННОЕ ЧТО НЕ ХВАТАЕТ ДЛЯ ПОЛНОГО ЧИСЛОВОГО ВИДА, ЭТО ВЫРАВНИВАНИЕ ТЕКСТА С ПРАВА, Т.Е. НУЖНО ПРИСОБАЧИТЬ СВОЙСТВО Alignment TEdit"у, КАКИМ ОБРАЗОМ ЭТО МОЖНО СДЕЛАТЬ?
ЕЩЕ РАЗ ВСЕМ СПАСИБО!



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

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

Наверх





Память: 0.46 MB
Время: 0.006 c
4-14326
eruc
2002-06-28 18:57
2002.09.05
hotkeys


8-14184
Antrax
2002-04-29 08:46
2002.09.05
Иконки


1-13990
DIM0N
2002-08-25 21:46
2002.09.05
Ресурсы


1-14015
Lendl
2002-08-23 12:23
2002.09.05
Классы через Dll


7-14296
VEG
2002-06-25 12:57
2002.09.05
У меня есть мааалюсенький вопросик:





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский