首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算百分比时抛出的OverflowException

计算百分比时抛出的OverflowException
EN

Stack Overflow用户
提问于 2012-05-02 23:37:10
回答 4查看 429关注 0票数 4

我的代码接受Dictionary作为参数,并返回Dictionary。

代码计算所有双精度值的总和,并使用总和来计算每个值占总和的百分比。它返回一个新的Dictionary,其中的百分比连接到键上。

在我的web服务器的事件查看器中记录了一些OverflowExceptions。日志记录异常发生在下面的代码Decimal percentage = (Decimal) (pDataPoints[key] / sum * 100);上,它说异常是在将值转换为小数时发生的。

我可能遗漏了什么边缘情况?

代码语言:javascript
复制
public static Dictionary<string, double> addPercentagesToDataPointLabels(Dictionary<string, double> pDataPoints)
{
Dictionary<string, double> valuesToReturn = new Dictionary<string, double>();

// First, compute the sum of the data point values
double sum = 0;
foreach (double d in pDataPoints.Values)
{
    sum += d;
}

// Now, compute the percentages using the sum and add them to the new labels.
foreach (string key in pDataPoints.Keys)
{
    string newKey = key;
    Decimal percentage = (Decimal) (pDataPoints[key] / sum * 100);
    percentage = Math.Round(percentage, ChartingValues.DIGITS_AFTER_DECIMAL_POINT);
    newKey += " " + percentage.ToString() + "%";
    valuesToReturn.Add(newKey, pDataPoints[key]);
}

return valuesToReturn;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-05-02 23:50:18

这就是了:

代码语言:javascript
复制
addPercentagesToDataPointLabels(new Dictionary<string, double>(){{"a", 0}});

就像gdoron说的,除以0。但它只为it抛出异常。对于浮点数,其结果为Double.Infinity。然后,它尝试将无穷大转换为十进制。

票数 6
EN

Stack Overflow用户

发布于 2012-05-02 23:42:37

代码语言:javascript
复制
pDataPoints[key] / sum * 100

此计算给出的结果太小或太大,无法以十进制存储。您可以捕获此异常并检查此表达式的值是什么。我的建议(因为我不知道你想要什么值):

代码语言:javascript
复制
double percentageValue = pDataPoints[key] / sum * 100;
try
{
    Decimal percentage = (Decimal) percentageValue;
}
catch (OverflowException exception)
{
    //log percentageValue
    throw;
}
票数 3
EN

Stack Overflow用户

发布于 2012-05-02 23:41:18

decimal的最大值为79,228,162,514,264,337,593,543,950,335。double (输入值)的最大值是1.7976931348623157E+308。您的一些输入值(或者至少是pDataPoints[key] / sum * 100的结果)可能会导致一个大于最大十进制值的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10417029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档