2015-05-13 6 views
1

Итак, я делаю игру с бесконечно расширяемой длиной чисел, и я пошел на 2,1 миллиарда. Это дает ошибку переполнения.Ошибка переполнения Visual Basic 2010

Арифметическая операция привела к переполнению.

В моем коде у меня есть эти две переменные:

Dim coal As BigInteger 
Dim totalCoal As BigInteger 

И эти две настройки приложения сохранить я их:

enter image description here

My.Settings.coal = coal.ToString() 
My.Settings.totalCoal = totalCoal.ToString() 

Я не могу отправить более чем 2 ссылки, так что свяжите файл .rar с изображениями в нем. https://dl.dropbox.com/s/s30knl44p9luhjy/Screenshots.rar?dl=0

Основная проблема заключается в том, что проблема не устраняется, поскольку я уже распространил ссылку на приложение. Мне нужно знать, как сделать значения неограниченными по длине больших чисел.

' Import Code 
Dim data As New StreamReader("C:\Temp\Data.txt") 
Dim value As String = "" 
Dim dataArray(1) As String 
Dim i As Integer = 0 
Dim setValue As Integer = 0 
Do Until data.Peek = -1 
    'Get 1 Value from Text File at a time 
    value = data.ReadLine() 
    'Place Value into Array 
    dataArray(i) = value 
    'Output 
    saveValues.Items.Add(dataArray(i)) 
    'Set Values 
    If setValue = 0 Then 
     My.Settings.coal = saveValues.Items(0) 
     setValue = 1 
    ElseIf setValue = 1 Then 
     My.Settings.totalCoal = saveValues.Items(1) 
     setValue = 2 
    End If 
    i += 1 
    If setValue = 2 Then 
     Application.Restart() 
    End If 
Loop 

' Export Code 
saveValuesSet.Text = 
My.Settings.coal & Environment.NewLine & 
My.Settings.totalCoal 
Using writer As StreamWriter = New StreamWriter("C:\Temp\Data.txt") 
    writer.WriteLine(saveValuesSet.Text) 
End Using 
+0

Вы храните 'String' в' Integer'. Это компилируется, потому что вы не ставили «Option Strict On» в начале модуля. Пожалуйста, сделайте, тогда он не будет компилироваться. – GSerg

ответ

2

2 миллиарда максимальное значение для типа данных Integer, вы можете использовать Long вместо того, чтобы позволить вам идти примерно до 9 * 10^18.

Если вы хотите использовать номера, которые могут быть любого размера, вы должны посмотреть на System.Numerics.BigInteger. Вам нужно будет добавить ссылку на System.Numerics в свой проект, чтобы использовать BigInteger.

Если вы хотите сохранить BigInteger в настройках, вы можете создать параметр с типом String и сохранить там строковое представление (конечно, строка может быть очень длинной).

My.Settings.BigIntegerString = myBigInteger.ToString 
+1

Если вы посмотрели на снимки экрана, предоставленные OP, вы увидите, что они уже используют 'BigInteger'. – GSerg

+1

Я не хотел загружать файл .rar. Теперь я вижу, что вы отредактировали вопрос. Проблема (кроме той, которую вы указали), по-видимому, заключается в том, что OP пытается сохранить BigInteger в элементе Integer Settings. – Blackwood

+0

Итак, что я могу сделать, чтобы исправить эту причину, все подталкивают меня, чтобы исправить это, поскольку они не могут играть. Должен ли я изменить настройки с целого на строку, и она будет работать? –