Форум: "Начинающим";
Текущий архив: 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