long - большие цифры на карте не рассчитываются как должны - PullRequest
0 голосов
/ 01 ноября 2011

Я использую большие числа (18 цифр), поэтому я сохраняю их в длинные переменные. Я обнаружил некоторые ошибки в своих вычислениях, поэтому я создал простую тестовую программу.

Расчет не работает как следует с большими числами ... Точнее, это связано с картой, которую я использую для хранения. Есть предложения?

    'Activity module
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim b1,b2,b3 As Button
    Dim MapData As Map
End Sub

Sub Activity_Create(FirstTime As Boolean)
    b1.Initialize("Set100")
    b1.Text="Set100"
    Activity.AddView(b1,10%x,10%y,80%x,20%y)
    b2.Initialize("SetBig")
    b2.Text="SetBig"
    Activity.AddView(b2,10%x,40%y,80%x,20%y)
    b3.Initialize("Increase")
    b3.Text="long++"
    Activity.AddView(b3,10%x,70%y,80%x,20%y)
    MapData.Initialize
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Set100_Click
    Dim l As Long
    l = 100
    Log("set to: " & l)
    MapData.Put("Token",l)
End Sub

Sub SetBig_Click
    ' long range: -9223372036854775808 to 9223372036854775807
    Dim l As Long
    l = 640345893847300380
    Log("set to: " & l)
    MapData.Put("Token",l)
End Sub

Sub Increase_Click
    Dim l As Long
    l = MapData.Get("Token")
    Log("from map: " & l)
    l = l + 1
    Log("new val : " & l)
    MapData.Put("Token",l)
End Sub

1 Ответ

0 голосов
/ 01 ноября 2011

Вы правы.Существует ошибка в преобразовании неизвестного объекта в Long, которая вызывает эту ошибку.Эта ошибка будет исправлена ​​в следующем обновлении.В то же время вы можете создать собственный тип и сохранить его.

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim b1,b2,b3 As Button
    Dim MapData As Map
    Type MyLong(l As Long)
End Sub

Sub Activity_Create(FirstTime As Boolean)
    b1.Initialize("Set100")
    b1.Text="Set100"
    Activity.AddView(b1,10%x,10%y,80%x,20%y)
    b2.Initialize("SetBig")
    b2.Text="SetBig"
    Activity.AddView(b2,10%x,40%y,80%x,20%y)
    b3.Initialize("Increase")
    b3.Text="long++"
    Activity.AddView(b3,10%x,70%y,80%x,20%y)
    MapData.Initialize
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Set100_Click
    Dim l As Long
    l = 100
    Log("set to: " & l)
    MapData.Put("Token",l)

End Sub

Sub SetBig_Click
    ' long range: -9223372036854775808 to 9223372036854775807
    Dim l As MyLong
    l.l = 640345893847300380
    Log("set to: " & l)
    MapData.Put("Token",l)
End Sub

Sub Increase_Click
    Log(MapData.Get("Token"))
    Dim l As MyLong
    l = MapData.Get("Token")
    l.l = l.l + 1
    'If you want to create a copy of the original MyLong object:
    Dim l2 As MyLong
    l2.l = l.l
    Log("new val : " & l.l)
    MapData.Put("Token",l2)
End Sub
...