代码之家  ›  专栏  ›  技术社区  ›  Dirk Brockhaus

将百分比分析为双倍

  •  7
  • Dirk Brockhaus  · 技术社区  · 16 年前

    有没有更好的方法来分析百分比,使其翻倍?

    Dim Buffer As String = "50.00%"
    Dim Value As Double = Double.Parse(Buffer.Replace("%",""), NumberStyles.Any, CultureInfo.InvariantCulture) / 100
    
    4 回复  |  直到 15 年前
        1
  •  7
  •   Mark Byers    16 年前

    你这样做对我来说似乎很好。

    我要注意的唯一一点是,您的程序假定了不变的区域性。确保这就是你的意思。例如,如果字符串来自用户输入,而不是固定的定义良好的协议,那么最好使用机器的默认区域性。

        2
  •  3
  •   jbe    15 年前

    您可以投票支持此.NET Framework 4关于Microsoft Connect的建议: Extend double.Parse to interpret Percent values

        3
  •  1
  •   µBio    16 年前

    我不熟悉VB,但是用它创建函数已经更好了

    伪代码:

    function PercentToDouble( Buffer )
        return Double.Parse(Buffer.Replace("%",""), NumberStyles.Any, CultureInfo.InvariantCulture) / 100;
    endfunction
    
        4
  •  0
  •   dbasnett    15 年前

    如果百分比是用户输入,则

    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