You need to enable JavaScript to run this app. 如何计算彩票号码销售百分比并对计算结果进行取整处理?
优惠活动
大模型
产品
解决方案
定价
更多

如何计算彩票号码销售百分比并对计算结果进行取整处理?

彩票销售占比计算的代码修正方案

原代码核心问题

  • 计算逻辑完全偏差:原代码采用的(totalNumbers / 100) * totalSellings公式,和“计算已售号码占总规模百分比”的目标完全不匹配。以总号码规模10000为例,公式计算时会先算出10000/100=100,再乘以已售号码数,最终结果被无端放大100倍——比如已售12个号码时,原代码输出1200,实际正确占比仅为0.12%。
  • 整数截断精度问题:即使修正公式,如果直接使用两个int类型做除法,C#会默认执行整数截断,直接丢弃小数部分。比如12 / 10000的整数计算结果为0,后续乘100也永远无法得到正确的百分比值。

正确实现逻辑

销售占比的核心计算公式为:销售占比 =(已售号码数 / 可供销售总号码数) 100*。实现时需要先规避整数截断导致的精度丢失,再根据业务需求完成取整,同时处理总号码数为0的边界场景,避免触发除零异常。
参考修正代码如下:

IList<NumbersLottery> allNumbers = context.AllNumbers.Where(n => n.concurso.id == concurso.id).ToList();
int totalNumbers = allNumbers.Count; // 总号码规模10000
int totalSellings = allNumbers.Where(n => n.status == NumbersLotteryStatus.SELL).ToList().Count;        

// 边界判断:避免总号码数为0时触发除零异常
if (totalNumbers == 0)
{
    Debug.WriteLine("Percents Sell: 0");
    return;
}
// 强制转为double类型计算,避免整数除法截断丢失精度
double sellPercent = (double)totalSellings / totalNumbers * 100;
// 按业务需求选择适配的取整规则:
// 1. 四舍五入取整(常规统计场景最常用)
int PercentSells = (int)Math.Round(sellPercent, MidpointRounding.AwayFromZero);
// 2. 向下取整(直接丢弃小数部分,适用于保守统计场景)
// int PercentSells = (int)Math.Floor(sellPercent);
// 3. 向上取整(存在小数就向上进1,适用于进度预估类场景)
// int PercentSells = (int)Math.Ceiling(sellPercent);

Debug.WriteLine("Percents Sell: " + PercentSells); 

效果校验

以总号码10000个、已售1200个的场景为例,修正后计算得到的销售占比为12%,取整后输出12,符合百分比的常规认知,不会出现原代码输出1200的逻辑偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 16:45:02