Прошу объяснить матекатику 1,8-1=0,800004
 Добавлено: 19.03.2015 03:07:04
Добавлено: 19.03.2015 03:07:04Натыкался на проблему с округлением ранее, и все решалось добавлением "SetRoundMode(rmUP);", но тут. 
Я не понимаю.
Алгоритм работает отдельно, если ему передать руками число и округлить, но если в составе прохода расчетов требуется округлить число, то вечно в окончании 0,00000000004.
Подумал что замудрил с типами, но тогда число сконвертированное в строку и обратно должно было исключить такую проблему, а тут стабильность.
Может кто то натыкался, а то особо нет времени ставить среду с fpc 3.1 и любоваться теми же ошибками.
			Я не понимаю.
Алгоритм работает отдельно, если ему передать руками число и округлить, но если в составе прохода расчетов требуется округлить число, то вечно в окончании 0,00000000004.
Подумал что замудрил с типами, но тогда число сконвертированное в строку и обратно должно было исключить такую проблему, а тут стабильность.
Может кто то натыкался, а то особо нет времени ставить среду с fpc 3.1 и любоваться теми же ошибками.
- Код: Выделить всё
- // Входит значение 0,79545153321
 function GetRoundValueTo2(X:Double):Double;
 begin
 try
 Math.SetRoundMode(rmUP);
 if not((x>-1)and(x<1)) then
 begin
 x:=SimpleRoundTo(x,-2);
 result:=x;
 end
 else begin
 x:=x+1; //получаем 1,79545153321
 x:=SimpleRoundTo(x,-2); //получаем 1,8
 x:=x-1; //получаем 0,8000000004
 result:=x;
 end;
 except
 result:=x;
 end;
 end;

