我想让我的应用程序计算一个折扣价格,这就是我如何找到我的折扣价格,但我有一个小问题(逻辑问题):
private void UpdateDiscount(object sender, EventArgs e)
{
decimal actualPrice = 0;
decimal discount = 0;
int calculateDiscount = 0;
int totalDiscount = 0;
int afterDiscount = 0;
int totalAfterDiscount = 0;
int total = 0;
if (numericTextBox1.TextLength == 6)
{
this.numericUpDown2.Enabled = true;
discount = Convert.ToInt32(this.numericUpDown2.Value);
calculateDiscount = Convert.ToInt32(discount / 100);
totalDiscount = calculateDiscount;
if (!string.IsNullOrEmpty(this.numericTextBox3.Text.ToString()))
{
actualPrice = Convert.ToDecimal(this.numericTextBox3.Text);
}
else
{
numericTextBox3.Text = "";
}
afterDiscount = Convert.ToInt32(actualPrice * totalDiscount);
totalAfterDiscount = Convert.ToInt32(actualPrice);
total = Convert.ToInt32(totalAfterDiscount - afterDiscount);
if (numericUpDown2.Value > 0)
{
this.numericTextBox6.Text = total.ToString();
}
}
else if (numericTextBox1.TextLength != 6)
{
this.numericUpDown2.Enabled = false;
this.numericUpDown2.Value = 0;
this.numericTextBox6.Text = "";
}
else
{
actualPrice = 0;
discount = 0;
calculateDiscount = 0;
totalDiscount = 0;
afterDiscount = 0;
totalAfterDiscount = 0;
total = 0;
MessageBox.Show("There is no data based on your selection", "Error");
}
}
这就是结果,折扣后的总额仍然与总价相同,尽管我已经给予它折扣值。
5条答案
按热度按时间zqdjd7g91#
给定
P
使得0 <= P
,以及D
,使得0 <= D <= 100
您可以计算需要应用的折扣(减价)
MD
,如下所示然后,您可以得到折扣价格
DP
为考虑到这一点,这应该可以:
afdcj2ne2#
处理 money 时不要使用
int
(或Convert.ToInt32
)。看这个
calculateDiscount
将变为0
,因为0.1将转换为0。sg2wtvxw3#
我怀疑这个问题主要是因为你在所有的事情上都使用了整数,特别是下面这两行:
当你用10来表示“10%”的折扣时,第二行实际上是零,这是因为你在做整数运算:整数只能是整数,当它们有一个非整数时,它们会将其截断。在本例中,您示例中的discount / 100将是0.1,它将被截断为零。
我建议在所有金融交易中使用decimal,而不是int。我会用decimal替换整个函数中的大多数整型变量类型。
e37o9pze4#
我觉得你会有问题...
Int(Integers)是整数,会向下舍入。如果折扣小于100,则一律为零。
避免在金融交易中使用double或float,因为它们会产生相当大的浮点错误。
使用整数是好的,因为它们准确而快速,但是你必须总是考虑如何将数字四舍五入,确保操作数和结果总是整数。
如果它们不是整数,则使用Decimal结构,该结构的底层由三个整数组成,但比使用整数慢三倍。
在大多数情况下是3倍慢于令人眼花缭乱的快,仍然结束了令人眼花缭乱的快,所以当有疑问时,使用小数。
laik7k3q5#
如果你想从折扣价格和折扣值中得到原始价格,你可以使用这个代码