首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在尝试编写的C#函数有一个奇怪的问题

问我正在尝试编写的C#函数有一个奇怪的问题
EN

Stack Overflow用户
提问于 2011-02-17 07:08:53
回答 4查看 91关注 0票数 0

我正在编写这个函数。

代码语言:javascript
复制
  const int ProgressBarLength = 230;
  foreach (TransactionDetail item in list)
  {
      var itemProgress =
        ((ProgressBarLength/item.PurchasesRequired) *
        Convert.ToInt32(item.TransactionAmount));

      item.ProgressBar = itemProgress > ProgressBarLength ? ProgressBarLength : itemProgress;
  }

现在我的循环中有2个TransactionDetail。

如果为item.PurchasesRequired = 500和TransactionAmount = 199.0,则结果值为0。但是,如果为item.PurchasesRequired = 5和TransactionAmount = 94.0,则返回有效结果。

我做错了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-17 07:12:49

看起来你在做整数除法。

230 / 500在整数除法中是零,而230 /5是46。

您可以通过将PurchasesRequired强制转换为double来强制执行浮点除法。如您所料,230 / 500在浮点除法中是0.46。

代码语言:javascript
复制
const int ProgressBarLength = 230;
foreach (TransactionDetail item in list)
{
    var itemProgress = ((ProgressBarLength / (double)item.PurchasesRequired)
                        * Convert.ToInt32(item.TransactionAmount));
    item.ProgressBar = Math.Min((int)itemProgress, ProgressBarLength);
}
票数 2
EN

Stack Overflow用户

发布于 2011-02-17 07:12:24

item.PurchasesRequired是int吗

如果是这样的话,你的问题是整数除法。

ProgressBarLength是一个int,所以230/500 = 0。

使用float、double或decimal (在强制转换中或用于ProgressBarLength)来保持所需的精度级别。

票数 7
EN

Stack Overflow用户

发布于 2011-02-17 07:11:00

我猜你应该在某个地方做一个双倍的石膏,以便在你的师中有更高的精度。当整型除以整型时,你得不到双精度的结果。

尝试以下操作:

代码语言:javascript
复制
double itemProgress = ( ((double)ProgressBarLength / item.PurchasesRequired )
                      * Convert.ToInt32( item.TransactionAmount ) );
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5023301

复制
相关文章

相似问题

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