2016-01-07 2 views
1

У меня есть ошибка в VB.net If CurrencyHolder.Text > 0 And CurrencyHolder.Text < 10000 ThenНеверное преобразование типа Double недействительно?

Я использую Maskedinputbox 00000.00 Когда я выполняю свой код и Maskedinputbox пуст, я получаю следующее сообщение об ошибке:

** Пробовал все возможное, чтобы перевести это !!!: $) Преобразование signstreak. для типа double недействительно

Как это исправить?

ответ

-1

Вы можете использовать val(): - Возвращает числа, содержащиеся в строке, в виде числового значения соответствующего типа.

If Val(CurrencyHolder.Text) > 0 AndAlso Val(CurrencyHolder.Text) < 1000 Then 
      'code 
     End If 

предостережений

val() рассматривать только . для проверки десятичного разделителя упаковывают конечного пользователя стиль lcoale десятичной точки, кроме . это не будет работать

+0

Hello Wingedpanther, это работает! Но я не знаю, почему это работает. Не могли бы вы объяснить мне это :)? – TheBlinderCoder

+0

@ TheBlinderCoder Обновлено !! –

+0

, но это вызовет ошибку во время выполнения, если пользователь вводит символы, которые нельзя отличить – 5uperdan

3

Использовать Double.Parse/Double.TryParse или Decimal.Parse/Decimal.TryParse. Для валют Decimal является подходящим типом.

Dim currency as Decimal 
Dim valid as Boolean = Decimal.TryParse(CurrencyHolder.Text, currency) 

If valid AndAlso currency > 0 AndAlso currency < 10000 Then 
    ' ... ' 
End If 

https://msdn.microsoft.com/en-us/library/system.decimal.tryparse(v=vs.110).aspx

Если текущий десятичный разделитель другой, чем тот, который вы хотите, чтобы поддержать (ФЭ вы используете 123,50€, но значение, которое вы должны проанализировать это 123.50$), вы можете использовать перегрузку разбора методы. Например:

Dim valid As Boolean = Decimal.TryParse(CurrencyHolder.Text, NumberStyles.Currency, NumberFormatInfo.InvariantInfo, currency) 
+0

+1 Это должен быть принятый ответ, и, кроме того, вы правильно выбрали этот Op должен использовать десятичный тип даты –

Смежные вопросы