java - 有没有更好的方法来处理双打的数学计算?
问题描述
我正在构建一个简单的库存和销售应用程序,所以我在 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;
}
输出:
解决方案
您可以将 替换String.valueOf(var)
为String.format("%.2f", var)
。
这将为您提供小数点前的所有数字,然后是小数点后的两位数字。
当然,正如 Jon 所说,在这种情况下使用 BigDecimal 会更好一些。您可以将其转换为 float 或 double 并使用我已经描述的方法(使用floatValue()
or doubleValue()
),或者您可以使用该toPlainString()
方法。
推荐阅读
- java - 如何使用用于 graphstream 的 java API 删除节点?
- ios - iOS:解码 YUY2 视频帧
- php - WooCommerce AJAX 删除导航车的按钮
- javascript - 无法使用 ES6 访问我的 JSON 文件
- javascript - .concat() 方法在这里用错了吗?
- sql-server - 带括号的环绕查询导致 XML 错误
- audio - linux:使用 gstreamer 的虚拟麦克风
- java - 测试中没有 EntityManager 的持久性提供程序
- email - 将文件附加到电子邮件而不将内容保存到本地文件
- csv - 用于映射两个 csv 文件中的列的脚本