![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Цитата:
Если человеку надо два знака после запятой, то и сравнивать надо не с 1E-9, а с 1E-2 или, на худой конец с 1E-3 |
|
#17
|
||||
|
||||
|
Цитата:
|
|
#18
|
||||
|
||||
|
а я хочу чтобы переменной "с" присваивался наиболее правильный результат...
![]() |
|
#19
|
||||
|
||||
|
А что, с точки зрения вещественных чисел в компьютере, более правильный результат?
|
|
#20
|
||||
|
||||
|
По видимому тот, что соответствует строковому представлению числа.
|
|
#22
|
||||
|
||||
|
Вы бы есчо ссылку на Google дали...
![]() Последний раз редактировалось SpectraL, 15.08.2011 в 15:49. |
|
#23
|
||||
|
||||
|
Цитата:
P.S. Можно и в Google поискать. |
|
#24
|
||||
|
||||
|
Да, поисчите пожалуйста...
Последний раз редактировалось SpectraL, 16.08.2011 в 10:07. |
|
#25
|
||||
|
||||
|
Ребят, а что вы тут за дискуссию развернули???
Код:
procedure TForm1.Button1Click(Sender: TObject); var a, b, c: Double; begin a:=212.53; b:=212.49; c:=a-b; c := round(c * 100 + 0.5) / 100; showmessage(floattostr(c)); end; |
|
#26
|
||||
|
||||
|
Цитата:
Код:
procedure TForm1.Button2Click(Sender: TObject); var a, b, c: Double; begin a:=212.053; b:=212.049; c:=a-b; c := round(c * 100 + 0.5) / 100; showmessage(floattostr(c)); end; ![]() |
|
#27
|
||||
|
||||
|
Достаточно вместо 100 подставить переменную, и вычислять максимальное количество знаков после запятой (у "a" и "b"). Циклом довести данную переменную до нужной цифры. Т.е. если после запятой одна цифра, то будет 10, если две - 100, три - 1000 и т.д.
|
|
#28
|
||||
|
||||
|
Ildar-tsr:
function IntPower(const Base: Extended; const Exponent: Integer): Extended; Код:
unit Math; function RoundTo(const AValue: Double; const ADigit: TRoundToRange): Double; var LFactor: Double; begin LFactor := IntPower(10, ADigit); Result := Round(AValue / LFactor) * LFactor; end; function SimpleRoundTo(const AValue: Double; const ADigit: TRoundToRange = -2): Double; var LFactor: Double; begin LFactor := IntPower(10, ADigit); Result := Trunc((AValue / LFactor) + 0.5) * LFactor; end; -- Код:
uses
UMathServices,
Memo1.Lines.Add(ulSub('212.53', '212.49'));
Memo1.Lines.Add(ulSub('212.053', '212.049'));
Memo1.Lines.Add(ulSub('212.4556565', '212.343676676')); |