Custom Query


Show under each result:

Results (76 - 78 of 3856)

Ticket Resolution Summary Owner Reporter
#3800 Fixed Number() - case sensivity with scientific notation by using $NUMBER_AUTO AspirinJunkie

Following Script:

$sIntUpper = "12345E5"
$sIntLower = "12345e5"

$sFloatUpper = "1.2345E5"
$sFloatLower = "1.2345e5"

ConsoleWrite(StringFormat("\n     xxx -> Number(xxx)\n% 8s -> %10d (Type: %s)\n% 8s -> %10.0f (Type: %s)\n% 8s -> %10.0f (Type: %s)\n% 8s -> %10.0f (Type: %s)\n\n", _
        $sIntUpper, Number($sIntUpper), VarGetType(Number($sIntUpper)), _
        $sIntLower, Number($sIntLower), VarGetType(Number($sIntLower)), _
        $sFloatUpper, Number($sFloatUpper), VarGetType(Number($sFloatUpper)), _
        $sFloatLower, Number($sFloatLower), VarGetType(Number($sFloatLower)) ))


     xxx -> Number(xxx)
 12345E5 ->      12345 (Type: Int32)
 12345e5 -> 1234500000 (Type: Double)
1.2345E5 ->     123450 (Type: Double)
1.2345e5 ->     123450 (Type: Double)

The capitalized letter "E" is recognized as an exponential character only if a decimal separator appears before it.

This is not the case for the lowercase "e".

#3817 Fixed Double to Int64 type conversion - wrong results Jon AspirinJunkie

Following script:

$fN = 562949953421312.0
$iN = Int($fN, 2)
$iN2 = Number($iN, 2)

ConsoleWrite("$fN :" & $fN & " (" & VarGetType($fN) & ")" & @CRLF & _
	"$iN :" & $iN & " (" & VarGetType($iN) & ")" & @CRLF & _
	"$iN2:" & $iN2 & " (" & VarGetType($iN2) & ")" & @CRLF)


$fN :562949953421312 (Double) $iN :562949953421313 (Int64) $iN2:562949953421313 (Int64)

This applies to all integer numbers >= 249 stored as double.

The numbers themselves can be mapped completely and without rounding errors in IEEE 754 double precision.

The naive approach to implementing an Int() function would be a C-type cast ((long long) fValue)) or a C++-typecast (static_cast<long long>(fValue)). However, these do not exhibit the problem:

#include <iostream>

using namespace std;

int main()
    double f = 562949953421312.0;
    long long iInt1 = (long long)f;
    long long iInt2 = static_cast<long long>(f);

In old public source codes of AutoIt also the C-cast was used for the Int() function ((__int64)m_fValue in method n64Value in file variant_datatype.cpp). In the meantime, however, there has apparently been a change here.

#3850 Fixed _WinAPI_GetDriveNumber never returns -1 as partition number Jpm AspirinJunkie

The documentation for _WinAPI_GetDriveNumber says:

[2] - The partition number, or (-1) if device cannot be partitioned.

This is consistent with the description of the STORAGE_DEVICE_NUMBER structure.

However, the problem here is that the PartitionNumber part is of data type DWORD - i.e. an unsigned integer. A value of -1 is therefore simply not possible. In C this is not a big problem, because DWORDs can also be tested for -1:

(DWORD)4294967295 == -1 // true

In AutoIt, however, 4294967295 is always returned in the case of -1 due to the conversion to Int64:

#include <WinAPIFiles.au3>

Local $aData = _WinAPI_GetDriveNumber('d:') ; a non partionable drive like a cd-drive
ConsoleWrite('Partition number: ' & $aData[2] & @CRLF)

Therefore, as a pragmatic solution, I suggest to change the structure definition as follows, deviating from the Win API documentation:

Local $tSDN = DllStructCreate('dword;dword;LONG')
Note: See TracQuery for help on using queries.