我有一个计算,可以求和或减去一些东西,但这取决于一个简单的条件。我的问题是,我不知道如何更改代码,所以我不需要仅仅用+或-的差来写两次计算。希望有人能帮我。提前谢谢。
public void changePrice(Stock stock, int amount, boolean isBuying) {
double roundRandomNumber = Math.round((0.5 + Math.random()) * 100) / 100.00;
double newPrice;
//calculates plus or minus depending on the buyoption
if (isBuying) {
newPrice = Math.round((stock.getPrice() + roundRandomNumber * 0.1 * amount) * 100) / 100.00;
} else {
newPrice = Math.round((stock.getPrice() - roundRandomNumber * 0.1 * amount) * 100) / 100.00;
}
if (newPrice > 0 && newPrice < 3000) {
stock.setPrice(newPrice);
}
}
您可以使用基于isBuying
值的+1
或-1
系数。
newPrice = Math.round((stock.getPrice() + (isBuying ? 1.0 : -1.0) * roundRandomNumber * 0.1 * amount) * 100) / 100.00;
您可以尝试只提取条件中的因子:
public void changePrice(Stock stock, int amount, boolean isBuying) {
double roundRandomNumber = Math.round((0.5 + Math.random()) * 100) / 100.00;
double newPrice;
//calculates plus or minus depending on the buyoption
double factor;
if (isBuying) {
factor = 1.0
} else {
factor = -1.0
}
newPrice = Math.round((stock.getPrice() + (factor * roundRandomNumber) * 0.1 * amount) * 100) / 100.00;
if (newPrice > 0 && newPrice < 3000) {
stock.setPrice(newPrice);
}
}
我提出用( / 100) * 0.1
替换roundRandomNumber
,得到一个可以简化为* 0.001
的表达式。
CCD_ 7也可以是CCD_。
或者使用1 + new Random().nextInt(100)
。
double roundRandomNumber = Math.ceil((Math.random()) * 100) * 0.001 * amount;
double newPrice = stock.getPrice();
if (isBuying) {
newPrice += roundRandomNumber;
} else {
newPrice -= roundRandomNumber;
}
newPrice = Math.round((newPrice * 100) / 100.00;
if (newPrice > 0 && newPrice < 3000) {
stock.setPrice(newPrice);
}
对于其余部分,它是保留寄存器原则:我对newPrice
进行逐步操作。
边界条件排除了0,这是有问题的。
当然应该提到BigDecimal
。其复杂性主要源于需要浮点的不动点运算。除非您需要速度,否则BigDecimal代码可能更可读,尽管很冗长。