我正在编写这个函数。
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,则返回有效结果。
我做错了什么?
发布于 2011-02-17 07:12:49
看起来你在做整数除法。
230 / 500在整数除法中是零,而230 /5是46。
您可以通过将PurchasesRequired强制转换为double来强制执行浮点除法。如您所料,230 / 500在浮点除法中是0.46。
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);
}发布于 2011-02-17 07:12:24
item.PurchasesRequired是int吗
如果是这样的话,你的问题是整数除法。
ProgressBarLength是一个int,所以230/500 = 0。
使用float、double或decimal (在强制转换中或用于ProgressBarLength)来保持所需的精度级别。
发布于 2011-02-17 07:11:00
我猜你应该在某个地方做一个双倍的石膏,以便在你的师中有更高的精度。当整型除以整型时,你得不到双精度的结果。
尝试以下操作:
double itemProgress = ( ((double)ProgressBarLength / item.PurchasesRequired )
* Convert.ToInt32( item.TransactionAmount ) );https://stackoverflow.com/questions/5023301
复制相似问题