我试图获得给定金额的折扣
让我们说:amount =“1.2”和discountPercentage =“17.3”
orig = Double.parseDouble("amount");
discount = orig*(discountPercentage/100);
discount = Math.round(discount);
discountedprice = orig - discount;
在上面的代码中:当我使用Math.round(0.2076)绕过折扣时,我得到零(0)结果。
我想要发生的是这样的:
0.2076 =向上舍入时应得到0.21
答案 0 :(得分:0)
试试这个:
...
discount *= 100;
discount = Math.round(discount);
discount /= 100;
...
答案 1 :(得分:0)
错误:
orig = Double.parseDouble("amount");
不使用变量,而是一个内容为a-m-o-u-n-t的字符串。
String amount = "1.2";
double orig = Double.parseDouble(amount);
double discount = orig*(discountPercentage/100);
discount = Math.round(discount);
但是要注意,double
值只能是十进制数的近似值,因为它是2的幂的总和; 0.2为2 -3 ...因此100 * 0.01并不精确等于1.0。
对于财务软件,最好使用BigDecimal,但是它更具有间接性。品尝:
BigBecimal amount = new BigDecimal("1.20"); // Precision of 2 decimals.
BigDecimal discount = amount.multiply(discountPercentage.movePointLeft(2));
答案 2 :(得分:0)
由于
,您的代码将抛出NumberFormatExceptionorig = Double.parseDouble("amount");
您正在尝试从实际字符串“amount”中解析数字。 如果已经将金额变量初始化,则应使用该变量(删除parseDouble方法中的引号。 E.g。
String amount = "7.0";
System.out.println(Double.parseDouble(amount));
您的变量类型也不清楚:discount,discountPercentage,discountedPrice。 根据您在问题中提供的代码,很多内容尚不清楚,因此可能是您问题的一部分。
答案 3 :(得分:0)
请勿使用Float
或Double
进行货币计算。使用BigDecimal
代替,例如声明here或here。
一些代码:
final BigDecimal orig = new BigDecimal(1.2);
final BigDecimal discountPercentage = new BigDecimal(0.173);
final BigDecimal discount = orig.multiply(discountPercentage);
System.out.println("discount = " + discount.setScale(2, BigDecimal.ROUND_HALF_UP));
打印:
折扣= 0.21
答案 4 :(得分:-1)
float round(float f,float prec)
{
return (float) (Math.floor(f*(1.0f/prec) + 0.5)/(1.0f/prec));
}
使用强>
round(0.2076f,0.01f)
<强>结果强>
0.21