2010-01-05 2 views
7

Есть ли лучший способ проанализировать процент, чтобы удвоить это?Процент анализа удваивается

Dim Buffer As String = "50.00%" 
Dim Value As Double = Double.Parse(Buffer.Replace("%",""), NumberStyles.Any, CultureInfo.InvariantCulture)/100 
+3

Почему жестко закодировать символ процента (%), когда вы могли бы использовать : http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.percentsymbol.aspx – rohancragg

ответ

7

, как вы делаете это, кажется, хорошо для меня ,

Единственный момент, о котором я буду заботиться, это то, что ваша программа принимает InvariantCulture. Убедитесь, что это на самом деле то, что вы имеете в виду. Например, было бы лучше использовать культуру по умолчанию для компьютера, если ваша строка поступает из пользовательского ввода, а не из фиксированного четко определенного протокола.

+0

Invariant.Culture - это просто для простоты образца. У Stackoverflow нет ввода пользователем моего кода :-) –

1

Я не знаком с VB, но создает функцию из него уже лучше

код псевдо:

function PercentToDouble(Buffer) 
    return Double.Parse(Buffer.Replace("%",""), NumberStyles.Any, CultureInfo.InvariantCulture)/100; 
endfunction 
3

Вы можете проголосовать за это .NET Framework 4 предложения на Microsoft Connect: Extend double.Parse to interpret Percent values

+1

Я проголосовал. У меня есть наклейка;) – dbasnett

+0

Я не понимал, сколько лет было ... – dbasnett

+0

@dbasnett Ужасно, похоже, что это предложение было закрыто без каких-либо объяснений и объяснений, почему они закрывали его. –

0

Если процент вводимый пользователем, то

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click 
    Dim pb As New PictureBox 
    Dim foo As New gameObj(pb, gameObjType.person) 

    Dim sInps() As String = New String() {"50.00 %", "51.00%", ".52", "53", ".54%"} 

    For Each sampleInput As String In sInps 
     Debug.WriteLine(ConvertPercentToDouble(sampleInput).ToString("n4")) 
    Next 

End Sub 

Private Function ConvertPercentToDouble(s As String) As Double 
    Dim Value As Double 
    Dim hasPercent As Boolean = s.Contains(System.Globalization.NumberFormatInfo.CurrentInfo.PercentSymbol) 
    Dim whereIsPC As Integer = Math.Max(s.IndexOf(" "), _ 
             s.IndexOf(System.Globalization.NumberFormatInfo.CurrentInfo.PercentSymbol)) 
    If Double.TryParse(s, Value) _ 
     OrElse Double.TryParse(s.Substring(0, whereIsPC).Trim, Value) Then 
     If Value > 1 OrElse hasPercent Then Value /= 100 
     Return Value 
    Else 
     Throw New ArgumentException("YOUR ERROR HERE") 
    End If 
End Function 
Смежные вопросы