我知道这个一般性问题已被问过几次。但是,在审核主题时,很多答案都是针对这个问题的,并且不能回答我的问题。
如果这是一个糟糕或愚蠢的问题,我道歉。我会问我的讲师,但她要到下周才能上班。
我遇到的问题是我在Java程序中有一个不能返回正确值的计算,我不知道为什么。方法是:
public int economicOrderQuantity()
//Calculate the Economic Order Quantity of a product
//Only displays the EOQ for one product for the sake of getting it to work
{
int economicOrderQuantity=0, demandPerWeek, setupPerOrder, costOfInventoryPerWeek, costOfUnit;
double orderQuantity, orderQuantity1, inventoryByUnit;
demandPerWeek = product1.getDemand();
setupPerOrder = product1.getSetup();
costOfInventoryPerWeek = product1.getInventory();
costOfUnit = product1.getUnit();
inventoryByUnit = costOfInventoryPerWeek / costOfUnit;
orderQuantity = (2 * demandPerWeek * setupPerOrder) / inventoryByUnit; //This is the EOQ algorithm
orderQuantity1 = Math.sqrt(orderQuantity);
economicOrderQuantity = (int) Math.round(orderQuantity); //Typecasts the value to an integer and rounds it
return economicOrderQuantity;
}
例如,如果需求率为45,设置成本为132,inventoryByUnit为0.60,那么EOQ将为140.71(四舍五入为141)。但是当我测试代码时,返回的值是109.我调试了代码,它执行计算2 * 45 * 132并返回11880,然后通过inventoryByUnit跳过除法并直接计算平方根并返回108.99 (四舍五入到109)。
对于我做错的任何帮助或建议都会非常感谢欢呼。
答案 0 :(得分:4)
(除非您使用的是早期的奔腾处理器之一,否则我认为假设Java Math始终返回正确的答案是非常安全的。)
这是因为:
inventoryByUnit = costOfInventoryPerWeek / costOfUnit;
不会返回您的想法。它返回1.两个int
之间的除法总是将结果作为int
返回。
试试这个:
inventoryByUnit = ((double) costOfInventoryPerWeek) / costOfUnit;
顺便说一句,如果您正在处理的是金钱,那么使用double
并不是一种非常推荐的方法。请改用BigDecimal
。
答案 1 :(得分:2)
inventoryByUnit = costOfInventoryPerWeek / costOfUnit;
这是一个整数除法(即使你赋给它的变量是一个双精度)。你想强迫它加倍
inventoryByUnit = 1.0 * costOfInventoryPerWeek / costOfUnit;