2010-01-05 22 views
7

Có cách nào tốt hơn để phân tích tỷ lệ phần trăm thành gấp đôi như thế này không?Tỷ lệ phần trăm phân tích cú pháp để tăng gấp đôi

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

Tại sao mã hóa cứng các biểu tượng phần trăm (%) khi bạn có thể sử dụng : http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.percentsymbol.aspx – rohancragg

Trả lời

7

Cách bạn đang làm nó có vẻ tốt với tôi .

Điểm duy nhất tôi sẽ cẩn thận là chương trình của bạn giả định InvariantCulture. Hãy chắc chắn rằng đây thực sự là ý của bạn. Ví dụ, có thể tốt hơn nếu sử dụng văn bản mặc định của máy nếu chuỗi của bạn xuất phát từ đầu vào của người dùng thay vì một giao thức được xác định rõ ràng.

+0

Invariant.Culture chỉ dành cho sự đơn giản của mẫu. Stackoverflow không có đầu vào người dùng cho mã mẫu của tôi :-) –

1

Tôi không quen thuộc với vb nhưng việc tạo ra một chức năng ra khỏi nó đã là tốt hơn

mã giả:

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

Bạn có thể bỏ phiếu cho điều này .NET Framework 4 gợi ý trên Microsoft Connect: Extend double.Parse to interpret Percent values

+1

Tôi đã bỏ phiếu. Tôi có nhận được một nhãn dán không;) – dbasnett

+0

Tôi không nhận ra đây là bao nhiêu ... – dbasnett

+0

@dbasnett Rất tiếc, có vẻ như đề xuất đó đã bị đóng mà không sửa chữa hoặc giải thích đầy đủ lý do tại sao họ đóng nó lại. –

0

Nếu phần trăm là người dùng nhập vào sau đó

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 
Các vấn đề liên quan