3

このまま丸めたい

13.1, round to 13.5
13.2, round to 13.5
13.3, round to 13.5
13.4, round to 13.5
13.5 = 13.5
13.6, round to 14.0
13.7, round to 14.0
13.8, round to 14.0
13.9, round to 14.0

上記の方法で必要な変更を申し訳ありません...このようにしましたが、適切ではありません

doubleValue = Math.Round((doubleValue * 2), MidpointRounding.ToEven) / 2;
4

7 に答える 7

8

13.1, round to 13.5およびで必要な場合は、次のよう13.9, round to 14.0になります。

double a = 13.1;
double rounded = Math.Ceil(a * 2) / 2;
于 2012-08-31T11:27:17.190 に答える
1

これは機能します。テストしたばかりです。

double a = 13.3;
var rn  =  a % 0.5 == 0 ? 1 : 0;
Math.Round(a, rn);
于 2012-08-31T11:24:26.637 に答える
0

と に最も近い0.513.613.7ある13.5ため、正しい解が得られます。

あなたの値のテーブルのために:

var value = 13.5;
var reminder = value % (int)value;
var isMiddle = Math.Abs(reminder - 0.5) < 0.001;
var result =  (isMiddle ? Math.Round(value * 2, MidpointRounding.AwayFromZero): Math.Round(value)*2)/ 2;
于 2012-08-31T11:25:59.383 に答える
0

C# の組み込みメソッドを使用せずにこれを行う簡単な方法 (必要に応じて) その writen i c++ (以前は c++ に round 関数がありませんでした) ですが、C# 構文に簡単に変更できます。

int round(float nNumToRound)
{

// Variable definition
int nResult;

// Check if the number is negetive
if (nNumToRound > 0)
{
    // its positive, use floor.
    nResult = floor(nNumToRound + 0.5);
}
else if (nNumToRound < 0)
{
    // its negtive, use ceil 
    nResult = ceil(nNumToRound - 0.5);
}

return (nResult);

}

于 2012-08-31T11:27:54.897 に答える
0
num = (num % 0.5 == 0 ? num : Math.Round(num));

完全なコンソール プログラムをここに示します。

static void Main(string[] args)
        {
            double[] a = new double[]{
                13.1,13.2,13.3D,13.4,13.5,13.6,13.7,13.8,13.9,13.58,13.49,13.55,
            };
            foreach (var b in a)
            {
                Console.WriteLine("{0}-{1}",b,b % 0.5 == 0 ? b : Math.Round(b));
            }
            Console.ReadKey();
        }

丸め要件が将来変更された場合は、単に0.5他の数値に変更する必要があります

于 2012-08-31T11:38:15.763 に答える
0

それが適切な方法かどうかはわかりませんが、うまくいきます。必要に応じてこれを試してください:

        double doubleValue = 13.5;
        double roundedValue = 0.0;
        if (doubleValue.ToString().Contains('.'))
        {
            string s = doubleValue.ToString().Substring(doubleValue.ToString().IndexOf('.') + 1);
            if (Convert.ToInt32(s) == 5)
            {
                roundedValue = doubleValue;
            }
            else
            {
                roundedValue = Math.Round(doubleValue);
            }
        }

        Console.WriteLine("Result:      {0}", roundedValue);
于 2012-08-31T11:50:01.537 に答える
-1
var a = d == (((int)d)+0.5) ? d : Math.Round(d);

dはダブルです。

于 2012-08-31T11:25:10.193 に答える