我正在编码这个东西,我想添加货币,但我不知道如何实施最高.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);
}
答案 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;
哦,对我来说第一篇文章很开心:)