8

私はC#アプリケーションに取り組んでいます。正規表現を使用してドット(。)があるところをコンマ(、)で数字の10進数を変更したい。

例えば:

Price= 100,00.56

数値を表すこの国際的なルールですが、私はスウェーデンのように、数値に対してさまざまな方法があります

Price= 100.00,56

だから私は正規表現を使用してドット(。)をカンマ(、)に、カンマ(、)をドット(。)に変更したい。これについて私を導くことができます。

4

6 に答える 6

25

数値をフォーマットするときは、オブジェクトを取る文字列フォーマット オーバーロードCultureInfoを使用する必要があります。スウェーデン語のカルチャ名は "sv-SE" で、ここで確認できます。

decimal value = -16325.62m;
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("sv-SE")));

編集

@OregonGhost が指摘しているように、数値の解析も で行う必要がありますCultureInfo

于 2010-08-04T09:48:48.933 に答える
6

RegExソリューションではありませんが、私の経験から-より正しい:

public static string CheckDecimalDigitsDelimiter(this string instance)
{
    var sv = new CultureInfo("sv-SE");
    var en = new CultureInfo("en-US");

    decimal d;
    return (!Decimal.TryParse(instance, NumberStyles.Currency, sv, out d) &&
            Decimal.TryParse(instance, NumberStyles.Currency, en, out d)) ?
        d.ToString(sv) : // didn't passed by SV but did by EN
        instance;
}

このメソッドは何をしますか? 指定された文字列が正しくないスウェーデン文字列であるが、正しい英語である場合、それをスウェーデン文字列に変換します (例: 100,00 -> 100,00but ) 100.00 -> 100,00

于 2010-08-04T10:00:15.510 に答える
5

正規表現がなくてもこれを行うことができます。例えば

var temp = price.Replace(".", "<TEMP>");
var temp2 = temp.Replace(",", ".");
var replaced = temp2.Replace("<TEMP>", ",");
于 2010-08-04T09:48:26.203 に答える
5

100,00.56 が何を表しているかわからないのですが、10.000,56 のことですか?
あなたの質問に答えるには:

このような単純なタスクに、なぜ RegEx を使用するのでしょうか? あなたはそれをもっと簡単に行うことができます:

string oldValue = "100,00.56";
char dummyChar = '&'; //here put a char that you know won't appear in the strings
var newValue = oldValue.Replace('.', dummyChar)
                       .Replace(',', '.')
                       .Replace(dummyChar, ',');

編集 @Oded に同意します。数値の書式設定にはCultureInfoクラスを使用します。

于 2010-08-04T09:50:07.893 に答える
5

こちらもご覧ください

System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
于 2010-08-04T09:50:33.970 に答える
3

この種のことを RegExp に依存しないでください :) build in cultures fx を使用します。

decimal s = decimal.Parse("10,000.56", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
string output = s.ToString("N",CultureInfo.GetCultureInfo("da-DK"));

en-US はそれを正しく解析し、da-DK は別の種類の表現を使用します。私は DK に住んでいるのでそれを使用しますが、出力に合った文化を使用する必要があります。

于 2010-08-04T09:54:08.193 に答える