Процент разбора, чтобы удвоить - PullRequest
7 голосов
/ 05 января 2010

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

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

Ответы [ 4 ]

7 голосов
/ 05 января 2010

То, как ты это делаешь, мне кажется хорошим.

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

3 голосов
/ 14 марта 2011

Вы можете проголосовать за это предложение .NET Framework 4 для Microsoft Connect: Расширить double.Parse для интерпретации значений процента

1 голос
/ 05 января 2010

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

код псевдо:

function PercentToDouble( Buffer )
    return Double.Parse(Buffer.Replace("%",""), NumberStyles.Any, CultureInfo.InvariantCulture) / 100;
endfunction
0 голосов
/ 14 марта 2011

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...