将小数四舍五入到最接近的5 c#

将小数四舍五入到最接近的5 c#,c#,rounding,C#,Rounding,我目前正试图从公式中计算出一个精确的数字,但在转换整数的小数部分时遇到了困难 例如,如果我将10除以3,我将得到3.3333,我的计算结果将需要从3.2开始。如果我有6.5,我的计算结果就需要偏离6.4 我正在努力捕捉这个移动数字的小数点,然后只舍入该数字的小数部分。下面是我的一些代码示例 // This number should be rounded down to the nearest .2 TopCalc = (In - UpperThreshold) * (TopPerc / 100

我目前正试图从公式中计算出一个精确的数字,但在转换整数的小数部分时遇到了困难

例如,如果我将10除以3,我将得到3.3333,我的计算结果将需要从3.2开始。如果我有6.5,我的计算结果就需要偏离6.4

我正在努力捕捉这个移动数字的小数点,然后只舍入该数字的小数部分。下面是我的一些代码示例

// This number should be rounded down to the nearest .2
TopCalc = (In - UpperThreshold) * (TopPerc / 100);

// This number should be rounded down to the nearest .2
MidCalc = (UpperThreshold - LowerThreshold) * (MidPerc / 100);

// This number should be rounded down to the nearest .2
LowCalc = LowerThreshold * (LowPerc / 100);

decimal Total = TopCalc + MidCalc + LowCalc;

return Total;
因此,进一步细分,假设每0.2是一枚20美分/便士的硬币,90%的硬币不是法定货币,因此,如果您必须提供$120.36,并且您所需的所有零钱都是20美分/便士,您只会提供$120.20,因为在本例中,16美分/便士并不构成整个硬币。下面还有一些例子

1.235 = 1.2
1.599 = 1.4
1.611 = 1.6
1.799999999999 = 1.6
1.85 = 1.8

始终四舍五入到最接近的文字0.2从不四舍五入。

您的小数总是正数还是负数

我设法让它工作,但它不是很优雅。也许有更好的解决方案:

    decimal d = 2.235M;
    int i;

    d = Math.Round(d, 1);
    i = (int) (d*10);
    i = i >> 1;
    i = i << 1;
    d = (decimal) i/10;
十进制d=2.235M;
int i;
d=数学四舍五入(d,1);
i=(int)(d*10);
i=i>>1;

你的小数总是正数还是负数

我设法让它工作,但它不是很优雅。也许有更好的解决方案:

    decimal d = 2.235M;
    int i;

    d = Math.Round(d, 1);
    i = (int) (d*10);
    i = i >> 1;
    i = i << 1;
    d = (decimal) i/10;
十进制d=2.235M;
int i;
d=数学四舍五入(d,1);
i=(int)(d*10);
i=i>>1;

i=i你可以用

static decimal NthRound(decimal d, decimal nth)
{
    var intPart = decimal.Truncate(d);
    var fifth = decimal.Truncate(nth * (d - intPart)) / nth;
    return intPart + fifth ;           
}
然后

Console.WriteLine( NthRound(10M/2M, 5M));
Console.WriteLine( NthRound(10M/3M, 5M));
Console.WriteLine( NthRound(13M/2M, 5M));
哪一个


在这种情况下,四舍五入到最接近的第五位

static decimal NthRound(decimal d, decimal nth)
{
    var intPart = decimal.Truncate(d);
    var fifth = decimal.Truncate(nth * (d - intPart)) / nth;
    return intPart + fifth ;           
}
然后

Console.WriteLine( NthRound(10M/2M, 5M));
Console.WriteLine( NthRound(10M/3M, 5M));
Console.WriteLine( NthRound(13M/2M, 5M));
哪一个


在这种情况下,哪一个四舍五入到最接近的第五个

您所说的“最接近的
.2
”是什么意思?在您的第一个示例(
3.3333==3.2
)中,听起来您是指字面意义上的
.2
,但在您的第二个示例(
6.5==6.4
)中,您似乎是指最近的偶数。但是那会使你的第一个例子不准确,因为最接近的偶数是
.4
我明白你的意思,我会说四舍五入到最接近的文字。所以基本上1.9是0,3.9是2,没有四舍五入,但这更令人困惑。现在,您的示例完全忽略了小数,而只是四舍五入到最接近的整数或偶数。请用你想要的内容和一些极端的例子来更新你的问题。嗨,鲁弗斯,很抱歉我这边来晚了,我刚刚意识到以上不是最清楚的例子,我已经进一步澄清了,并试图更清楚地总结出我想要达到的目标。你所说的“最近的
.2
”是什么意思?在您的第一个示例(
3.3333==3.2
)中,听起来您是指字面意义上的
.2
,但在您的第二个示例(
6.5==6.4
)中,您似乎是指最近的偶数。但是那会使你的第一个例子不准确,因为最接近的偶数是
.4
我明白你的意思,我会说四舍五入到最接近的文字。所以基本上1.9是0,3.9是2,没有四舍五入,但这更令人困惑。现在,您的示例完全忽略了小数,而只是四舍五入到最接近的整数或偶数。请用你想要的内容更新你的问题,并用一些极端的例子来澄清。嗨,鲁弗斯,很抱歉我这边来晚了,我刚刚意识到以上不是最清楚的例子,我已经澄清了一点,并试图总结出更清楚的我希望达到的目标。小数总是积极的,我只是安装了一个SDK,但会反馈结果,这是一个棘手的问题,至少可以说小数总是正数,我只是安装了一个SDK,但会反馈结果,至少可以说这是一个棘手的问题