将百分数解析为双精度浮点数

6
有没有更好的方法将百分比解析为double类型?
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
4个回答

6

我觉得你目前的做法看起来不错。

唯一需要注意的是,你的程序假设了InvariantCulture。请确保这确实是你想要的。例如,如果你的字符串来自用户输入而不是固定的、明确定义的协议,那么最好使用机器的默认文化。


Invariant.Culture 只是为了简化示例。Stackoverflow 没有用户输入我的示例代码 :-) - Dirk Brockhaus

3

@dbasnett 很遗憾,看起来那个建议被关闭了,但并没有进行修复或充分解释为何要关闭它。 - NH.

1

我不熟悉VB,但将其创建为一个函数已经更好了。

伪代码:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接