Вниз
Скачать: CL | DM;

сравнение чисел   Найти похожие ветки 

← →
VladSel   (2008-01-16 03:59) [0]

Помогите разобраться !!!
задача: имея число (real) r:=123.456; и количество знаков после запятой 3, передать их в функцию GetValue, которая это сделает (делаю это в функции для того чтобы проверять всевозможные условия этого значения) и вернёт полученное значение.
Функцию написал, пробую проверить работу if r<>123.456 then, а результат не понятный, в дебаггере показывает одинаковые значения, при этом считает их разными. Для округления использую SimpleRoundTo а не round потому, что round работает не корректно.

procedure TForm1.Button1Click(Sender: TObject);
var r:real;
 value:variant;
 function GetValue(value:variant; digit:integer):variant;
 var r:real;
 begin
   r:=SimpleRoundTo(value,-digit);
   Result:=r;
 end;
begin
 r:=123.456;
 if r=0 then r:=0;
 value:=r;
 r:=GetValue(value,3);
 if r<>123.456 then
   r:=0;
 if r=0 then r:=0;
end;


← →
Riply ©   (2008-01-16 04:06) [1]

> [0] VladSel   (16.01.08 03:59)
> Помогите разобраться !!!
Попробуй, сначала, привести код в порядок.
Я, например, путаюсь где какая r.
И еще не поятно, что происходит в строках тиап if r=0 then r:=0;


← →
VladSel   (2008-01-16 04:34) [2]

procedure TForm1.Button1Click(Sender: TObject);
var r:real;
value:variant;

function GetValue(value:variant; digit:integer):variant;
var r1:real; //эта переменная чтобы значение записанное в результат имело тип real
begin
  r1:=SimpleRoundTo(value,-digit); //сдесь округлил на сколько надо
//..
//..
  Result:=r1; //записал полученное значение в результат
end;

begin
r:=123.456; //присвоил нужное значение
if r=0 then r:=0; //это чтобы Delphi ничего не оптимизировал
r:=GetValue(r,3); //получаю новое значение (полученное функцией)
if r<>123.456 then //а вот здесь надо остановиться в дебаггере (там сравниваемые значения показываются одинаково)
  r:=0; //а сюда я вообще не должен попасть, т.к. значения должны быть равны, но почему-то попадаю
if r=0 then r:=0; //это чтобы Delphi ничего не оптимизировал
end;


← →
VladSel   (2008-01-16 04:38) [3]

более просто:

 r:=123.456;
 r:=round(r*1000)/1000;
 if r<>123.456 then
   r:=0; //сюда зайти не должен а захожу


← →
VladSel   (2008-01-16 04:56) [4]

все разобрался, дело п преобразовании типов


← →
Anatoly Podgoretsky ©   (2008-01-16 08:37) [5]

> VladSel  (16.01.2008 04:56:04)  [4]

Дело не в нем, а в особенностях веществественных с ПЛАВАЮЩЕЙ ЗАПЯТОЙ.

> имея число (real) r:=123.456; и количество знаков после запятой 3

это попахивает абсурдом, число с ПЛАВАЮЩЕЙ ЗАПЯТОЙ и не тебе решать сколько знаков будет после запятой.
Марш за учебниками или хотя бы на Королевство Дельфи за статьей.


← →
Григорьев Антон ©   (2008-01-16 08:44) [6]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374



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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.015 c
2-1200561259
asdf
2008-01-17 12:14
2008.02.10
Запрос в MySQL


2-1200246721
Steep
2008-01-13 20:52
2008.02.10
Ошибка "I/O error 104"


15-1199966204
pavel_guzhanov
2008-01-10 14:56
2008.02.10
Может кто-нибудь помочь по Excel?


15-1199628190
kotenok
2008-01-06 17:03
2008.02.10
Перенос базы данных на новый компьютер


4-1183566201
RAndrey
2007-07-04 20:23
2008.02.10
не работает ShellExecute




   Наверх