C# 如何使这种舍入算法适用于负数?

C# 如何使这种舍入算法适用于负数?,c#,algorithm,math,rounding,C#,Algorithm,Math,Rounding,我用C#编写了这个简单的舍入方法,它将任何浮点数(输入)舍入到任何目标数(目标)的最近倍数: float RoundToFloat(浮点输入,浮点目标) { 浮动商=输入/目标; if(商-数学楼层(商)

我用C#编写了这个简单的舍入方法,它将任何浮点数(输入)舍入到任何目标数(目标)的最近倍数:

float RoundToFloat(浮点输入,浮点目标)
{
浮动商=输入/目标;
if(商-数学楼层(商)<.5)
{
返回数学下限(商)*目标;
}
其他的
{
返回数学单元(商)*目标;
}
}
然而,当输入为负数时,这似乎会中断。我该怎么做才能让它工作?我尝试过计算商的绝对值,如果输入为负数,我会翻转是否使用ceil/floor,但无论哪种方式都会得到奇怪的结果


任何建议都将不胜感激

明白了。。。对于负数,您需要反向应用
下限
上限
,因为四舍五入必须是相对于0的“正确方向”。
Floor
总是更负,而
天花
则相反

您可以在
if
中添加一个“简单”的“iff”,也称为“Boolean equals”

if(商-数学下限(商)<.5)==
(商>=0){

什么是
目标
?另外,您已经在使用的
数学
库中提供了舍入功能。@Sach参见我文章的第一句。内置的“舍入”方法简单地四舍五入到最接近的整数,即1的倍数。假设我希望它是3的倍数,或5的倍数,或18.5的倍数,或任何东西。这就是target的目的。因此,例如,如果我想将8.2四舍五入到最接近的3的倍数,答案将是9。我试图回答的问题是如何处理负输入。因此,如果我想将-17舍入到最接近的倍数3的st倍数,我想得到-18。好了,知道了,这不适用于什么负数了吗?我尝试了一些像
-5.23f
-7.83f
,和
-8.83f
,它似乎工作得很好。不过我确实使用了C#
数学
库;我不知道这
Mathf
是什么。@Sach
Mathfork。它与
数学
,不同之处在于它与浮点数一起工作。欢迎使用StackOverflow。请参阅。在您发布MRE代码并准确指定问题之前,我们无法有效帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您指定的问题。
float RoundToFloat(float input, float target)
{
    float quotient = input / target;

    if (quotient - Mathf.Floor(quotient) < .5)
    {
        return Mathf.Floor(quotient) * target;
    }
    else
    {
        return Mathf.Ceil(quotient) * target;
    }
}
if (quotient - Mathf.Floor(quotient) < .5) ==
   (quotient >= 0) {