Начало » Программирование » Delphi » Округление (Странности Delphi 11)
Округление [сообщение #4852] |
Mon, 08 April 2024 18:18  |
sf
Сообщений: 11 Зарегистрирован: July 2023
|
Junior Member |
|
|
Народ, есть вот такой код с почти похожими исходными данными для округления:
Writeln(SimpleRoundTo(0.09435, -4));
Writeln(SimpleRoundTo(0.19435, -4));
Writeln(SimpleRoundTo(0.29435, -4));
Writeln(SimpleRoundTo(0.39435, -4));
Writeln(SimpleRoundTo(0.49435, -4));
Writeln(SimpleRoundTo(0.59435, -4));
Writeln(SimpleRoundTo(0.69435, -4));
Writeln(SimpleRoundTo(0.79435, -4));
Writeln(SimpleRoundTo(0.89435, -4));
Writeln(SimpleRoundTo(0.99435, -4));
Спорим, не угадаете, что будет на выходе? Я, например, до сих пор под впечатлением. Вот такой результат ():
9.44000000000000E-0002
1.94300000000000E-0001
2.94300000000000E-0001
3.94400000000000E-0001
4.94400000000000E-0001
5.94400000000000E-0001
6.94400000000000E-0001
7.94400000000000E-0001
8.94400000000000E-0001
9.94400000000000E-0001
Это, сцука, какое-то новое слово в математике!
А мы тут с народом третий день бъемся, переводим проект на Лазаря и математика не совпадает. Теперь понятно почему. У Лазаря всё как положено:
9.43999999999999999973E-0002
1.94400000000000000005E-0001
2.94400000000000000014E-0001
3.94400000000000000008E-0001
4.94400000000000000003E-0001
5.94400000000000000024E-0001
6.94399999999999999992E-0001
7.94400000000000000014E-0001
8.94399999999999999981E-0001
9.94400000000000000003E-0001
Как дальше жить?
|
|
|
|
|
|
Re: Округление [сообщение #6203 является ответом на сообщение #4902] |
Fri, 08 August 2025 15:32  |
Keks
Сообщений: 7 Зарегистрирован: April 2024
|
Junior Member |
|
|
Функция округления - как в Clipper
function C_Round(var Value : Double; const K : Integer): Double;
const K10 : array [0..10] of Double = (1,10,100,1000,10000,100000,
1000000,10000000,100000000,
1000000000,10000000000);
begin
if ( Value < 0.0 ) then
Result := ( TRunc ( Value * K10[K] - 0.5 ) ) / K10[K]
else
Result := ( TRunc ( Value * K10[K] + 0.5 ) ) / K10[K];
end;
Операция сравнения с нулем - больше "нуля"
Stoim - стоимость в деньгах рубли точка копейки (два знака после запятой)
Abs(Stoim) > 0.005
|
|
|
Переход к форуму:
Текущее время: Mon Aug 11 13:04:51 GMT+3 2025
Общее время, затраченное на создание страницы: 0.00779 секунд
|