Java编码分不起作用

时间:2016-05-19 03:51:42

标签: java minecraft bukkit

我正在编码这个东西,我想添加货币,但我不知道如何实施最高.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);
}

2 个答案:

答案 0 :(得分:3)

您应该使用 BigDecimal 类而不是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  

注意:
关于如何进行计算,有很多教程,文档也很清楚,祝你好运。

答案 1 :(得分:1)

您可以使用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;

您还可以使用静态Math类来处理它:

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

哦,对我来说第一篇文章很开心:)