質問

使用するフォーマット文字列を取得する方法を知っている人はいますか 銀行家の四捨五入?私は「{0:c}」を使用していますが、これは銀行員の丸めと同じ方法では丸められません。の Math.Round() メソッドはバンカーの丸めを行います。フォーマット文字列を使用して丸める方法を複製できるようにする必要があるだけです。


注記: 元の質問はかなり誤解を招くものであり、正規表現に言及した回答はそこから派生しています。

役に立ちましたか?

解決

文字列入力に対して Math.Round() を呼び出すだけで、必要な動作を得ることができないでしょうか?

の代わりに:

string s = string.Format("{0:c}", 12345.6789);

する:

string s = string.Format("{0:c}", Math.Round(12345.6789));

他のヒント

Regexp はパターン マッチング言語です。Regexp では算術演算を行うことはできません。

IFormatProvider と ICustomFormatter をいくつか試してみましょう。ここにあるリンクが正しい方向を示している可能性があります。 http://codebetter.com/blogs/david.hayden/archive/2006/03/12/140732.aspx

それは不可能です。正規表現には「数値」の概念がありません。を使用できます 一致評価者 しかし、命令型の C# コードを追加することになり、正規表現のみの要件から外れてしまいます。

.Net には、算術丸めと銀行四捨五入の両方のサポートが組み込まれています。

//midpoint always goes 'up': 2.5 -> 3
Math.Round( input, MidpointRounding.AwayFromZero );

//midpoint always goes to nearest even: 2.5 -> 2, 5.5 -> 6
//aka bankers' rounding
Math.Round( input, MidpointRounding.ToEven );

「ゼロから離れる」というのが学校で習ったことですが、実際には「均等にする」丸めがデフォルトです。

これは、コンピューターのプロセッサーが内部で銀行員の丸め処理も行うためです。

//defaults to banker's
Math.Round( input );

丸めフォーマット文字列はデフォルトで銀行家の丸めになると思っていましたが、そうではありませんか?

.NET 3.5 を使用している場合は、これを行うのに役立つ拡張メソッドを定義できます。

public static class DoubleExtensions
{
    public static string Format(this double d)
    {
        return String.Format("{0:c}", Math.Round(d));
    }
}

その後、それを呼び出すと、次のことができます。

12345.6789.Format();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top