Java 编码美分不起作用

Java coding cents not working

我正在编写这个东西,我想添加货币,但我不知道如何实施最大 .99 美分规则

我正在使用

public static double getBal(Player player){
    if(!PlayerData.getPlayerDataFile(player).contains("Money")){
        return 0.00;
    }
    double bal = PlayerData.getPlayerDataFile(player).getDouble("Money");
    return bal;
}

因此,如果我向播放器收取一些费用,它最终可能会变成 2.9333333333 或其他东西,我该如何解决这个问题?

我向他们收费

    public static void setBal(Player player, double newBal){
    PlayerData.setPlayerDataFileValue(player, "Money", newBal);
}

您应该使用 BigDecimal class 而不是 Double 来处理货币。
例如:

BigDecimal money = new BigDecimal("2.9");

更新
我测试了一下,效果很好:

    String priceStr = "2.9";
    BigDecimal price = new BigDecimal(priceStr);
    System.out.println(price);
    // output 2.9

    priceStr = "2.90";
    price = new BigDecimal(priceStr);
    System.out.println(price);
    // output 2.90

    Double priceDouble = 2.90;
    price = new BigDecimal(priceDouble);
    System.out.println(price);
    // output 2.89999999999999... need to do some rounding

    priceDouble = 2.90;
    price = new BigDecimal(priceDouble).setScale(2, RoundingMode.CEILING);
    System.out.println(price);
    // output 2.90  

注:
至于如何计算,教程很多,文档也很清楚,祝你好运。

您可以使用 DecimalFormat 和 setRoundingMode 将其四舍五入到小数点后两位。

DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.CEILING);

对于您的代码,您可以使用

DecimalFormat df = new DecimalFormat("#.##");
df.setRoundingMode(RoundingMode.CEILING);
double unformattedBal = PlayerData.getPlayerDataFile(player).getDouble("Money");
double bal = df.format(unformattedBal);
return bal;

您也可以使用静态数学 class 来处理它:

 double bal = (double) Math.round(unformattedBal * 100d) / 100d;

哦,先祝我快乐 post :)