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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
15-1199966204
pavel_guzhanov
2008-01-10 14:56
2008.02.10
Может кто-нибудь помочь по Excel?


3-1190966355
Игорь Шевченко
2007-09-28 11:59
2008.02.10
Как обеспечить невозможность вставки данных в обратном порядке


2-1200326503
Windows.Error[41].Generate;
2008-01-14 19:01
2008.02.10
Скопировать весь текст из memo


4-1183228372
Dmitry_177
2007-06-30 22:32
2008.02.10
Виртуальный диск из образа диска


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