3

decimal.parse を使用して文字列を 10 進数値に変換する際に問題が発生しています。これは私が持っているコード行です:

fixPrice = decimal.Parse(mItemParts.Groups["price"].Value.Replace("$", "").Replace(" ", "").Replace("usd", ""));     

変換しようとしている値は次のとおりです:「$779.99」

次に、10 進数への解析が行われると、77999 という値が得られます。

77999 ではなく 779.99 を入手したいのですが、よろしくお願いします。

含まれる正規表現: "@"\[^\""]+?)\""[^~]+?\]+?src=\""(?[^\""]+?)\""[^ >]+?title=\""(?[^\""]+?)\""[^~]+?price\"">(?[^\<]+?)\<[^~] +?\(?[^\<]+?)\

4

4 に答える 4

6

私は使用しますDecimal.TryParse()

decimal parsedDecimal = 0;
string yourCurrency = "$779.99";
bool didParse = Decimal.TryParse(yourCurrency,
                                 NumberStyles.Currency,
                                 new CultureInfo("en-US"), out parsedDecimal);

if(didParse) {
    // Parse succeeded
}
else {
    // Parse failed
}
于 2012-04-13T17:12:13.770 に答える
3

'.'がグループ区切り文字で、','が小数点記号であるカルチャでこれを実行しているようです。これを回避するには、CultureInfoを取得するParseオーバーロードを使用します。

fixPrice = decimal.Parse(stringExpression, CultureInfo.InvariantCulture);

NumberStylesまた、列挙型を調べて、通貨記号について自分で心配する必要がないようにします。

fixPrice = decimal.Parse(stringExpression, NumberStyles.Currency, new CultureInfo("en-US"));
于 2012-04-13T17:09:03.780 に答える
2

CultureInfo解析しているカルチャのインスタンスを渡します。

CultureInfoから継承IFormatProvider

編集:

これが変換のサンプルです

Decimal.Parse(yourValue, NumberStyles.AllowCurrencySymbol |
                         NumberStyles.AllowDecimalPoint   |
                         NumberStyles.AllowThousands,
              CultureInfo.InvariantCulture);
于 2012-04-13T17:08:48.637 に答える
1

これは私のために働く:

string decStr = "$779.99";
CultureInfo ci = new CultureInfo("en-US");
decimal fixPrice = decimal.Parse(decStr, NumberStyles.Currency, ci);
于 2012-04-13T17:15:22.340 に答える