[英]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.