37

重複の可能性:
c# - 10 進数値を小数点以下 2 桁に丸める方法 (ページに出力するため)

以下のように小数点以下を切り捨てたい

すなわち

  • 2.22939393 -> 2.229
  • 2.22977777 -> 2.229
4

10 に答える 10

63

Math.Roundを使用できます:

decimal rounded = Math.Round(2.22939393, 3); //Returns 2.229

または、N3数値形式で ToString を使用できます。

string roundedNumber = number.ToString("N3");

編集:丸めたくないので、簡単にMath.Truncateを使用できます:

Math.Truncate(2.22977777 * 1000) / 1000; //Returns 2.229
于 2008-12-01T03:41:15.223 に答える
17
double d = 2.22977777;
d = ( (double) ( (int) (d * 1000.0) ) ) / 1000.0 ;

もちろん、丸め誤差を切り捨てようとしている場合、これは機能しませんが、例で指定した値ではうまく機能するはずです。時々うまくいかない理由の詳細については、この質問に対する最初の 2 つの回答を参照してください。

于 2008-12-01T03:57:06.033 に答える
7

任意の小数点以下を切り捨てる関数:

public decimal Truncate(decimal number, int digits)
{
  decimal stepper = (decimal)(Math.Pow(10.0, (double)digits));
  int temp = (int)(stepper * number);
  return (decimal)temp / stepper;
}
于 2010-07-22T13:15:00.890 に答える
7

これは、整数オーバーフローの影響を受けない拡張メソッドです(上記の回答のいくつかのように)。また、効率のために 10 の累乗をキャッシュします。

static double[] pow10 = { 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10 };
public static double Truncate(this double x, int precision)
{
    if (precision < 0)
        throw new ArgumentException();
    if (precision == 0)
        return Math.Truncate(x);
    double m = precision >= pow10.Length ? Math.Pow(10, precision) : pow10[precision];
    return Math.Truncate(x * m) / m;
}
于 2011-08-02T20:35:50.213 に答える
3

これは上記の TcKs の提案に似ていますが、int 変換ではなく math.truncate を使用しています

VB: しかし、あなたはアイデアを得るでしょう

Private Function TruncateToDecimalPlace(byval ToTruncate as decimal, byval DecimalPlaces as integer) as double 
dim power as decimal = Math.Pow(10, decimalplaces)
return math.truncate(totruncate * power) / power
end function
于 2012-02-10T22:06:00.880 に答える
0

これを試して

double d = 2.22912312515;
int demention = 3;
double truncate = Math.Truncate(d) + Math.Truncate((d - Math.Truncate(d)) * Math.Pow(10.0, demention)) / Math.Pow(10.0, demention);
于 2011-09-26T13:14:17.507 に答える
0

出力したい形式は何ですか?

文字列に満足している場合は、次の C# コードを検討してください。

double num = 3.12345;
num.ToString("G3");

結果は「3.12」になります。

このリンクは、.NET を使用している場合に役立つことがあります。 http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

お役に立てば幸いです....しかし、使用している言語と出力を希望する形式を特定しない限り、適切な解決策を提案することは困難です。

于 2008-12-01T09:07:57.327 に答える
0

おそらく別の簡単な解決策は次のとおりです。

>>> float("%.1f" % 1.00001)
1.0
>>> float("%.3f" % 1.23001)
1.23
>>> float("%.5f" % 1.23001)
1.23001
于 2010-01-21T14:29:55.600 に答える
-2

これを試して:

decimal original = GetSomeDecimal(); // 22222.22939393
int number1 = (int)original; // contains only integer value of origina number
decimal temporary = original - number1; // contains only decimal value of original number
int decimalPlaces = GetDecimalPlaces(); // 3
temporary *= (Math.Pow(10, decimalPlaces)); // moves some decimal places to integer
temporary = (int)temporary; // removes all decimal places
temporary /= (Math.Pow(10, decimalPlaces)); // moves integer back to decimal places
decimal result = original + temporary; // add integer and decimal places together

短く書くこともできますが、これはより説明的です。

編集:短い方法:

decimal original = GetSomeDecimal(); // 22222.22939393
int decimalPlaces = GetDecimalPlaces(); // 3
decimal result = ((int)original) + (((int)(original * Math.Pow(10, decimalPlaces)) / (Math.Pow(10, decimalPlaces));
于 2008-12-01T09:22:52.633 に答える
-3

すべてを忘れてこれをチェックしてください

double num = 2.22939393;
num  = Convert.ToDouble(num.ToString("#0.000"));
于 2010-02-16T06:24:34.777 に答える