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

C#技术问题:除法结果保留两位小数与日期格式转换异常排查

两个C#开发问题的解决方案

我来帮你搞定这两个实际开发里的问题,直接上可运行的代码和关键说明:


问题1:除法运算结果保留两位小数

首先要注意整数除法的陷阱:如果直接用两个int类型相除,C#会执行整数除法(直接舍弃小数部分),所以第一步要先把运算数转成浮点类型(比如double或decimal),再进行计算。

这里提供两种常用的实现方式:

方式1:使用ToString格式化(直接输出字符串)

这种方式适合需要直接得到带两位小数的字符串场景:

int dividend = 7;
int divisor = 3;
// 先转成浮点型再除法,避免整数除法的坑
double result = (double)dividend / divisor;
// 用"F2"格式化,强制保留两位小数,不足补零
string formattedResult = result.ToString("F2"); // 输出 "2.33"

方式2:使用Math.Round进行四舍五入(保留数值精度)

如果需要保留数值类型(比如double/decimal)并控制小数位数,推荐用Math.Round,尤其是财务场景建议用decimal保证精度:

decimal num1 = 10m;
decimal num2 = 3m;
// 用decimal计算精度更高,避免浮点误差
decimal roundedResult = Math.Round(num1 / num2, 2); // 结果是 3.33
// 转成字符串同样用"F2"确保两位小数格式
string resultStr = roundedResult.ToString("F2"); // 输出 "3.33"

问题2:日期格式转换(解决周数补零问题)

你的需求是把dd/mm/yyyy格式的日期转成yyww.d(yy是年份后两位,ww是两位周数,d是星期数字),核心问题是周数要补零成两位,同时要确保周数和星期的计算符合预期。

完整实现代码

using System;
using System.Globalization;

public class DateConverter
{
    public static string ConvertDate(string inputDate)
    {
        // 1. 解析输入的dd/mm/yyyy格式日期,规避系统文化差异影响
        if (!DateTime.TryParseExact(inputDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))
        {
            throw new ArgumentException("输入日期格式不正确,请使用dd/mm/yyyy格式");
        }

        // 2. 获取年份后两位
        string yearPart = date.ToString("yy", CultureInfo.InvariantCulture);

        // 3. 获取周数:指定周一为一周起始,周数规则为"至少包含4天的第一周"(符合ISO标准)
        Calendar calendar = CultureInfo.InvariantCulture.Calendar;
        int weekNumber = calendar.GetWeekOfYear(
            date,
            CalendarWeekRule.FirstFourDayWeek,
            DayOfWeek.Monday
        );
        // 用"D2"格式化周数,自动补前导零(比如6变成06)
        string weekPart = weekNumber.ToString("D2", CultureInfo.InvariantCulture);

        // 4. 获取星期数字:调整默认枚举,让周一=1、周二=2...周日=7(默认DayOfWeek.Sunday=0)
        int dayNumber = (int)date.DayOfWeek == 0 ? 7 : (int)date.DayOfWeek;

        // 5. 拼接成目标格式
        return $"{yearPart}{weekPart}.{dayNumber}";
    }

    // 测试示例
    public static void Main()
    {
        // 测试2018年第6周周二(对应日期2018-02-06)
        string testDate = "06/02/2018";
        string result = ConvertDate(testDate);
        Console.WriteLine(result); // 输出:1806.2
    }
}

关键说明:

  • 周数补零:通过weekNumber.ToString("D2")实现,D2表示固定两位数字,不足时自动补前导零,完美解决你当前输出186.2的问题。
  • 周数计算规则:通过Calendar.GetWeekOfYear的参数指定周一为一周起始,确保周数计算符合你的预期(不同地区周数规则可能不同,可根据需求调整CalendarWeekRule枚举值)。
  • 星期数字调整:C#默认DayOfWeek.Sunday=0,我们把周日转为7,这样周一到周日对应1-7,完全匹配你的示例需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:03:45