Действительно, странно. Это -1, а IsInt(-1) возвращает 1 .возвращает 0
ConsoleWrite(-0.05 / (0.125 + 0.05) * 7 / 2 &@CRLF)
ConsoleWrite((((-0.05) / (0.125 + 0.05)) * 7) / 2 &@CRLF)
ConsoleWrite(IsInt((((-0.05) / (0.125 + 0.05)) * 7) / 2))
Когда в выражении участвует больше одного оператора, порядок вычисления выражения определяется приоритетом операторов. Приоритеты, используемые в AutoIt даны ниже. Если два оператора имеют одинаковый приоритет - выражение вычисляется слева направо.
От высшего к низшему:
NOT
^
* /
+ -
&
< > <= >= = <> ==
AND OR
$n = 10 * -0.05 / (0.125 + 0.05) * 7 / 2 / 10
ConsoleWrite($n &@CRLF)
ConsoleWrite(IsInt($n) &@CRLF)
Видимо там не -1, а что то типа: -1.000000000000001
#include <BigNum.au3>
ConsoleWrite(_BigNum_Parse('-0.05 / (0.125 + 0.05) * 7 / 2'))
#include <BigNum.au3>
$sText = _BigNum_Add ( '0.125', '0.05' )
MsgBox(0, 'Сообщение', $sText)
$sText = _BigNum_Div ( '-0.05', $sText, 100 )
MsgBox(0, 'Сообщение', $sText)
$sText = _BigNum_Mul ( $sText, '7' )
MsgBox(0, 'Сообщение', $sText)
$sText = _BigNum_Div ( $sText, '2', 100 )
MsgBox(0, 'Сообщение', $sText)
Посмотрел функцию _BigNum_Parse изнутри, проблема в том что там точность вычислений по умолчанию, то есть всё округляется заранее и каждое последующее действие увеличивает некорректность. Думаю в эту функцию нехватало бы добавить точность, а лучше вообще ей не пользоваться сейчас, так как её точность ниже точности AutoIt3.InnI сказал(а):-0.9999997
MsgBox(0, 'Int', _
Int(-0.99999999999999) &@CRLF& _ ; 0
Int(-0.999999999999999)) ; -1
это не противоречия, а уточнения. я привел те расчеты для C2H5OH и для Mur, который уже удалил свои сообщения, чтобы убедиться, что ответ равен примерно -1, а не -0.081...противоречивые результаты