首页 > 解决方案 > 有没有更好的方法来处理双打的数学计算?

问题描述

我正在构建一个简单的库存和销售应用程序,所以我在 android 中编写了一个利润计算方法,以获取所有产品的利润作为总利润并在应用程序的 TextView 中显示。值是双倍的,所以我在下面编写了这个方法来获得总利润,但输出有点奇怪,它显示类似于“2.45116E7”或“1.22558E7”等等,因为它每次运行应用程序时都会发生变化,但是与总利润的格式相同。所以我添加了 Log.d 来跟踪方法内部的输出,我意识到该方法确实从每个产品中获取利润值并将它们加起来作为总利润,但只要总利润达到 10,000,000 或更高时,它会更改为该输出。请我需要帮助来了解什么是错误的和可能的解决方案。请参阅下面的方法以及 Log.d 输出的屏幕截图。

private double getStoreProfits() {
    for (Product product : products) {
        Log.d("Profit", String.valueOf(product.getProfit()));
        totalProfit += product.getProfit();
        Log.d("Total Profits", String.valueOf(totalProfit));
    }
    return totalProfit;
}

输出:

Log.d 输出的屏幕截图

标签: javaandroidfirebase

解决方案


您可以将 替换String.valueOf(var)String.format("%.2f", var)

这将为您提供小数点前的所有数字,然后是小数点后的两位数字。


当然,正如 Jon 所说,在这种情况下使用 BigDecimal 会更好一些。您可以将其转换为 float 或 double 并使用我已经描述的方法(使用floatValue()or doubleValue()),或者您可以使用该toPlainString()方法。


推荐阅读