результат разности 7.27595761418343E-12 ?

Добрый день! подскажите что с этим делать. Банальная операция

var     d;
        d =     73367.48 - 56228.55;
        var f =  17138.93;
        var c = d - f;
        Log.Write(1,c);

Результат
-7.27595761418343E-12
Хотя по логике должен быть 0

Нравится

5 комментариев

Попробуйте так:

var d = 0 ;
d = 73367.48 - 56228.55;
var f = 17138.93;
var c = 0;
с = d - f;
Log.Write(1,c);

Олег как бы я не изменял значение f результат 0 в любом случае

Это обусловлено внутренним форматом хранения вещественных чисел, не в Террасофт, а вообще в компьютерах.
Например, подобное условие тоже не всегда может быть истинным:

if ((24.35 - 12.15 - 12.20) == 0.0)

В вашем случае, я бы попробовал воспользоваться дополнительно округлением до 2-х знаков.
Также почитайте эту тему:
http://www.community.terrasoft.ua/blogs/4080

я немного извратился и сделал вот так

var x = new Number(Dataset.Values('CashflowAnount')  - Dataset.Values('InvoiceAmount'));
		var g = new Number(Dataset.Values('Dolg'));
		var h = new Number(Number(x.toFixed(2))+g); 
		Dataset.Values('Balance') = h.toFixed(2);

Может ли быть случай когда подсчет будет неверен?

при работе с вещественными числами с плавающей запятой (типы float,real,double,extended) более высокая ошибка округления, чем с вещественными числами с фиксированной запятой (decimal,fixed).
-7.27595761418343E-12 - это почти ноль, а для 0 в таких типах данных есть специальный код
Вы можете сделать величину погрешности eps = 0.00000001 и проверять, не превышает ли её значение, или делать округление до соответствующей цифры перед записью результата

Показать все комментарии