Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: 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 вся ветка

Текущий архив: 2008.02.10;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.046 c
15-1199931425
дучф_ч
2008-01-10 05:17
2008.02.10
ошибка при открытии Progecta


15-1199996404
КПавел
2008-01-10 23:20
2008.02.10
Горизонтальный TListBox


15-1200079941
necromancer
2008-01-11 22:32
2008.02.10
Создать аякс-лоадер


10-1143020140
Qtx
2006-03-22 12:35
2008.02.10
IHTMLElement - onclick Handler


2-1200242920
savyhinst
2008-01-13 19:48
2008.02.10
Динамическое создание свойств





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