0

考虑代码:

public double calculatePrice()
    { 
      int discount = 0 ;
      double totalPrice=itemCount*itemPrice;
      double netPrice;
      for(int i=0;i<NOOFITEMS.length;i++)
      {
        /*  if(i==0)
          {
              if(itemCount<NOOFITEMS[i])
               { discount=0;
                 break;
               }
          }
          /*if(i==NOOFITEMS.length-1)
          {  
        if(itemCount>NOOFITEMS[i])
           {  discount=50;
             break;
           }
          }
          if(itemCount<NOOFITEMS[i]&&itemCount>NOOFITEMS[i+1])
          {
            discount=DISCOUNTPERCENTAGE[i];  
          }*/
          discount=10;
      }
     System.out.println("discount "
             +discount);  
     System.out.println("totalprice "
             +totalPrice); 
      netPrice=totalPrice-(totalPrice*(discount/100));
      return netPrice;
    }

输出::

Bill  ID:   501
Item NAME: grocery
 NO of Item: 11
 Price of Item: 250.0
discount 10
totalprice 2750.0
net price          2750.0
TRAINEE ID:   502
TRAINEE NAME: fruits
 Price of Item: 300.0
Item NO: 15
discount 10
totalprice 4500.0
net price         4500.0

的值"netprice"应该4050 [4500-(4500*(10/100)] 按照给定的语句。但该值4500始终输出..discount/100计算不正确。总是忽略小数部分。无法弄清楚错误..!

4

4 回答 4

3

罪魁祸首是:

totalPrice*(discount/100)

discount是一个整数,所以discount/100整数除法和小数被截断。例如,10/100为 0。

要解决此问题,您可以强制使用双打:

totalPrice*(discount/100d)
于 2013-01-12T18:25:50.267 回答
3

discount/100 是整数除法。当折扣小于 100 时,这将始终为 0。

我想给出一个更好的答案。作为在我的一些 Java 课程中分配这个问题的教授,找到你的编码错误的方法......

当您的代码没有达到您的预期时。设置断点并观察每一行代码的行为。这听起来很乏味,但它变得更快。

当你发现这条线正在做你不期望的事情时,请仔细查看这条线。有时您仍然可以看到它,并且需要将线条分成更小的部分。在这种情况下,您可以分多个步骤进行数学运算。

温度 = 折扣 / 100;

然后在较长的表达式中使用 temp 。这是比寻求他人帮助更好的调试方式。你会学得更快,成为一个更自信的程序员。

于 2013-01-12T18:26:40.627 回答
1

当使用doubletype 并且您希望输出也是double如此时,让您的所有变量double代替int. 操作ints 将导致ints。将其更改为 double 不会导致任何问题,因为所有int数字也是double数字。

就您的示例而言,将变量“折扣”更改为加倍:

double discount = 0;

此外,您正在除以 100,它也是一个 int,也将其更改为 double:

netPrice = totalPrice - (totalPrice * (discount / 100d));

或者要进行更安全的操作,请为所有数字定义变量以更清晰地查看它们:

double divider = 100;
netPrice = totalPrice - (totalPrice * (discount / divider));
于 2013-01-12T18:34:31.717 回答
0

试试这个:

netPrice=totalPrice-(totalPrice*(discount/100.));

您使用了整数算术。

于 2013-01-12T18:26:33.143 回答