You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C# .NET中如何将小数向上取整至0.5或0.25?

在C# .NET中实现decimal的指定粒度取整

首先需要明确两种可能的需求(根据你的示例描述,存在两种理解方向):


一、按照你的示例逻辑取整

你的示例显示的是按指定粒度“就近取整到0.5的倍数”,具体规则:

规则1:按0.5粒度取整(结果为整数)

  • 若小数部分 < 0.5,取整数部分
  • 若小数部分 ≥ 0.5,取整数部分+1
    对应示例:1.4→1,1.6→2

规则2:按0.25粒度取整(结果为0.5的倍数)

  • 若小数部分 < 0.25,取整数部分
  • 若0.25 ≤ 小数部分 < 0.75,取整数部分+0.5
  • 若小数部分 ≥ 0.75,取整数部分+1
    对应示例:1.2→1,1.26→1.5,1.75→2

实现代码:

// 按0.5粒度取整(结果为整数)
public static decimal RoundToHalfInteger(decimal value)
{
    var integerPart = decimal.Truncate(value);
    var fractionalPart = value - integerPart;
    return fractionalPart >= 0.5m ? integerPart + 1 : integerPart;
}

// 按0.25粒度取整(结果为0.5的倍数)
public static decimal RoundToHalfStep(decimal value)
{
    var integerPart = decimal.Truncate(value);
    var fractionalPart = value - integerPart;
    if (fractionalPart < 0.25m)
        return integerPart;
    else if (fractionalPart < 0.75m)
        return integerPart + 0.5m;
    else
        return integerPart + 1;
}

二、真正的“向上取整到0.5/0.25的倍数”

如果你的需求是取大于等于原数的最小的指定粒度倍数(这是标准的向上取整定义),规则如下:

规则1:向上取整到0.5的倍数

  • 1.4→1.5(大于等于1.4的最小0.5倍数)
  • 1.6→2.0(大于等于1.6的最小0.5倍数)

规则2:向上取整到0.25的倍数

  • 1.2→1.25(大于等于1.2的最小0.25倍数)
  • 1.26→1.5(大于等于1.26的最小0.25倍数)
  • 1.75→1.75(本身就是0.25的倍数)

实现代码:

利用decimal.Ceiling方法,通过缩放数值来实现:

// 向上取整到0.5的倍数
public static decimal CeilingToHalf(decimal value)
{
    // 将数值放大2倍,向上取整后再缩小2倍
    return decimal.Ceiling(value * 2) / 2;
}

// 向上取整到0.25的倍数
public static decimal CeilingToQuarter(decimal value)
{
    // 将数值放大4倍,向上取整后再缩小4倍
    return decimal.Ceiling(value * 4) / 4;
}

验证示例:

// 向上取整到0.5的倍数
Console.WriteLine(CeilingToHalf(1.4m)); // 输出1.5
Console.WriteLine(CeilingToHalf(1.6m)); // 输出2.0

// 向上取整到0.25的倍数
Console.WriteLine(CeilingToQuarter(1.2m)); // 输出1.25
Console.WriteLine(CeilingToQuarter(1.26m)); // 输出1.5
Console.WriteLine(CeilingToQuarter(1.75m)); // 输出1.75

内容的提问来源于stack exchange,提问作者Pjcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:15:41