4

ちょっとややこしいですが、どうしてこうなったのでしょうか?

Console.WriteLine(IsNumeric("$0")) - False

Console.WriteLine(IsNumeric("€0")) - False

Console.WriteLine(IsNumeric("£0")) - True

Console.WriteLine(IsNumeric("£")) - False

私にはかなり奇妙に思えますが、これを行う理由は何ですか

編集:最後にも機能します:

Console.WriteLine(IsNumeric("300£")) - True

Console.WriteLine(IsNumeric("300£0")) - False

Console.WriteLine(IsNumeric("£300£")) - False
4

1 に答える 1

7

イタリア在住 - イタリアのロケールで実行

Console.WriteLine(IsNumeric("$0")) ' False
Console.WriteLine(IsNumeric("€0")) ' True
Console.WriteLine(IsNumeric("£0")) ' False
Console.WriteLine(IsNumeric("£"))  ' False

これにより、常にtrueが返されます

using System.Globalization;

Console.WriteLine(MyIsNumeric("$0", NumberStyles.AllowCurrencySymbol, "en-US"))
Console.WriteLine(MyIsNumeric("€0", NumberStyles.AllowCurrencySymbol, "it-IT")) 
Console.WriteLine(MyIsNumeric("£0", NumberStyles.AllowCurrencySymbol, "en-GB")) 


Public Function MyIsNumeric(ByVal val as String, ByVal NumberStyle as NumberStyles, cName as String) as Boolean
    Dim result as Double
    return Double.TryParse(val,NumberStyle, new CultureInfo(cName), result)
 End Function

したがって、現在のロケール通貨記号が入力文字列の前後にある場合、IsNumeric (元々は VB6 ランタイムで定義されていた) でsmart、現在のロケール通貨記号を解析から除外するのに十分であると結論付けることができます。

于 2012-11-01T19:20:39.740 に答える