C# 我想写的C函数有个奇怪的问题
我在写这个函数C# 我想写的C函数有个奇怪的问题,c#,C#,我在写这个函数 const int ProgressBarLength = 230; foreach (TransactionDetail item in list) { var itemProgress = ((ProgressBarLength/item.PurchasesRequired) * Convert.ToInt32(item.TransactionAmount)); item.ProgressBar = ite
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个TransactionDetails
如果item.PurchasesRequired=500且TransactionMount=199.0,则结果值为0。但是,如果item.PurchasesRequired=5且TransactionMount=94.0,则返回有效结果
我做错了什么?我猜你应该做一个演员阵容,在某个地方翻一番,以提高你的级别。当一个整数除以一个整数时,不会得到一个双精度的结果 请尝试以下操作:
double itemProgress = ( ((double)ProgressBarLength / item.PurchasesRequired )
* Convert.ToInt32( item.TransactionAmount ) );
item.Purchases是否需要整数
如果是这样,您的问题是整数除法
var itemProgress = (double) ProgressBarLength / item.PurchasesRequired * item.TransactionAmount;
ProgressBarLength是一个整数,因此230/500=0
在强制转换或ProgressBarLength中使用float、double或decimal来保持所需的精度级别。看起来您正在执行整数除法
var itemProgress = (double) ProgressBarLength / item.PurchasesRequired * item.TransactionAmount;
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);
}
我猜TransactionDetail.PurchaseRequired是int类型的字段或属性 ProgressBarLength/item.PurchasesRequired将in除以int,结果是int,而不是float。在第一个示例中,230/500进行整数除法,结果当然是0 您可以将表达式计算为双精度,也可以先进行乘法运算,这样就不会因为整数除法而丢失相关精度
var itemProgress = (double) ProgressBarLength / item.PurchasesRequired * item.TransactionAmount;
或