gpt4 book ai didi

java - “折扣”功能无法正常工作

转载 作者:行者123 更新时间:2023-12-01 23:15:16 26 4
gpt4 key购买 nike

我有一个函数discount,它接受一个“rate”参数( double )并将我的类中的私有(private)变量netPrice更新为减价。计算看似可行,但有一个问题;它会产生不准确的结果。

public class Good{
private String name;
private double netPrice;

final static double VAT_RATE = 0.2;

/**
* The constructor instantiates an object representing a priced good.
* @param name
* @param netPrice
*/
public Good(String name, double netPrice){
this.name = name;
this.netPrice = netPrice;
}

/**
* Retrieves and reads the value of name.
* @return the name of the good.
*/
public String getName(){
return name;
}

/**
* Updates the value name.
* @param name
*/
public void setName(String name){
this.name = name;
}

/**
* Retrieves and reads the value of netPrice
* @return the net price of the good.
*/
public double getNetPrice(){
return netPrice;
}

/**
* Updates the value netPrice
* @param netPrice
*/
public void setNetPrice(double netPrice){
this.netPrice = netPrice;
}

/**
* @return netprice adjusted for VAT
*/
public double grossPrice(){
return netPrice + (netPrice * VAT_RATE);
}

public void discount(double rate){
double discount = (netPrice/100) * rate;
netPrice = netPrice - discount;
}
/**
* @return formatted string stating the name and the gross price of the good.
*/
public String toString(){
return "This " + name + " has a gross price of \u00A3 " + grossPrice();
}

public static void main(String[] args){
Good milk = new Good("milk", 0.50);

System.out.println(milk);
milk.discount(20);
System.out.println(milk);
}
}

在上面的示例中,我预计折扣价格为 £ 0.48,但我得到 £ 0.48000000000000004。我不知道为什么会出现这种情况,所以如果有人能够解释为什么会发生这种情况,那就太好了。

至于修复,我最初认为可以通过使用以下方法四舍五入到 2 d.p. 来规避此问题:

public void discount(double rate){
double discount = (netPrice/100) * rate;
netPrice = netPrice - discount;
netPrice = Math.round(netPrice * 100.0) / 100.0

但这似乎不起作用,事实上它给了我与上面相同的答案。另一个修复可能涉及使用 BigDecimal,但我不知道如何在不将 netPrice 变量更改为不同类型的情况下让它干净地工作(这是我不想做的事情)。有什么想法吗?

最佳答案

用于财务用途 Bigdecimal

阅读这篇文章

java-performance.info/bigdecimal-vs-double-in-financial-calculations/

关于java - “折扣”功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58355512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com