繁体   English   中英

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类而不是Double来处理货币。
例如:

BigDecimal money = new BigDecimal("2.9");

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

    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;

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

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

哦,很高兴为我发表第一篇文章:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM