2

顧客の10進形式を作成したいと考えています。「(3003.3003d).ToString(#、###。00 ##」)を実行すると、「3,003.3003」になります。フォーマットとして取得しようとしているのは「3'003.300,3」です。

カスタマーメソッドmath.floorを使用して自分で分解することはできますが、カルチャ情報を使用して探していることを実行する方法があるかどうか知りたいです。誰かがそれを行う方法を知っていますか?

チュートリアルはかなり良かったので、答えとしてカスタムIFormatproviderを使ってその人を書きましたが、私が必要としていたものに現在の文化が存在するとは思いません。これが私の最後の答えでした:

private string ToCustomDecimal(decimal Input, int MaxLenPostDec, int MinLenPostDec)
    {
        string CustD;
        string[] Split = Input.ToString().Split('.');
        string BigNum = Split[0];
        string SmallNum = "0";
        if (Split.Length > 1)
            SmallNum = Split[1];
        int Spot = 0;
        bool FirstD = false;
        string OutBigNum = "";
        for (int Locc = BigNum.Length - 1; Locc >= 0; Locc--)
        {
            Spot++;
            if (FirstD == false)
            {
                OutBigNum = BigNum.Substring(Locc, 1) + OutBigNum;
                FirstD = true;
            }
            else
                OutBigNum = (Spot % 3 == 1 ? "'" : "") + BigNum.Substring(Locc, 1) + OutBigNum;
        }
        Spot = 0;
        FirstD = false;
        string OutSmallNum = "";
        for (int Locc = 0; Locc < SmallNum.Length; Locc++)
        {
            Spot++;
            if (FirstD == false)
            {
                OutSmallNum += SmallNum.Substring(Locc, 1);
                FirstD = true;
            }
            else
            {
                OutSmallNum += (Spot % 3 == 1 ? "," : "") + SmallNum.Substring(Locc, 1);
            }
            if (Locc >= MaxLenPostDec - 1)
                break;
            if (Locc == SmallNum.Length - 1 && MinLenPostDec > Locc)
            {
                for (int Locc2 = Locc; Locc2 < MinLenPostDec - 1; Locc2++)
                {
                    Spot++;
                    OutSmallNum += (Spot % 3 == 1 ? "," : "") + 0;
                }
            }
        }
        CustD = OutBigNum + "." + OutSmallNum;
        return CustD;
    }
4

3 に答える 3

3

あなたは過負荷を調べている必要がありますToString("#,###.00##", myFormatProvider)

したがって、カスタムIFormatproviderが必要です。

于 2012-05-02T14:20:32.980 に答える
1

これはうまくいくようですが、私はそれをテストしませんでした。

(3003.3003d).ToString(@"#\'###.00#\,##")
于 2012-05-02T14:19:14.033 に答える
0

IFromatProviderを使用したDecimal.ToStringオーバーロードを確認してください。特定の(CultureInfo.CreateSpecificCulture())または現在のカルチャ(CultureInfo.CurrentCulture)を使用してユーザーの通貨を表示したいと思います。

于 2012-05-02T14:19:54.630 に答える