将双精度数字相乘,从输出中取小数点后两位
double creditCardPercentage = 0.03;
String renewalEventAmount = "2144.60";
double expectedRenewalAmount = 0;
expectedRenewalAmount = Double.parseDouble(renewalEventAmount) * creditCardPercentage;
expectedRenewalAmount的输出是64.338
,那么我们如何用两个十进制数格式化上述输出
预期:
64.33
一些答案建议使用printf
;但如果不想立即打印答案,可以使用String。格式
相同:
String formattedString = String.format("%.2f", expectedRenewalAmount);
现在,您可以根据需要打印结果,也可以在Swing文本窗口中显示结果,或者将所有的零更改为笑脸,或者对结果字符串执行任何您喜欢的操作,这是使用printf
无法执行的。
你可以使用NumberFormat。getNumberInstance()。format(expectedRenewalAmount)
将使用系统属性格式化值。您还可以修改NumberFormat
,如果需要,可以指定小数位数。
或者你可以使用系统。出来printf
或字符串。格式化
也可以格式化值。。。
String value = String.format("%.2f", expectedRenewalAmount);
您应该使用BigDecimal
类,因为它具有浮点精度的内置处理:
BigDecimal creditCardPercentage = new BigDecimal(0.03);
String renewalEventAmountString = "2144.60";
BigDecimal renewalEventAmount = new BigDecimal(renewalEventAmountString);
BigDecimal expectedRenewalAmount = renewalEventAmount.multiply(creditCardPercentage);
expectedRenewalAmount = expectedRenewalAmount.setScale(2, BigDecimal.ROUND_HALF_DOWN);
System.out.println(expectedRenewalAmount); // prints 64.33
使用BigDecimal
处理格式的优点之一是,它允许您将代码与业务逻辑分离,即从将结果输出给用户的视图代码中向下舍入到小数点后2位。
问题内容: 我正在尝试将双精度数格式化为精确到小数点后2位(如果有分数),然后使用DecimalFormat将其截断 因此,我想取得下一个结果: 变体#1 变体#2 有什么想法可以选择我的情况吗? 问题答案: 我达到的唯一解决方案是使用 if语句在这里提到 测试中 如果有人知道更优雅的方式,请分享!
问题内容: 如果值为,则应将其格式化为。如果是,那么应该是。 问题答案: 这是一个实用程序,可以将双精度舍入(而不是截断)双精度至小数位数。 例如: 原始版本;提防这个 这在小数位数很高(例如)或整数部分很大(例如)的极端情况下会严重崩溃。感谢Sloin指出这一点。 多年来,我一直在使用上面的方法将“不太大”的双精度取整到2或3个小数位(例如,以秒为单位的清理时间用于记录目的:27.9876543
问题内容: 应该很容易。我本来是用javascript来做的,但是在设置我的处理程序页面中的表单之前必须先做。无论如何,我需要使这些值具有2个小数位。Ex 219333.5888888必须为219333.58。有修剪功能或其他功能吗? 问题答案: 这是格式化十进制值的简单示例
我想把54.5345四舍五入到54.54,也就是说,如果我有第三个小数位,那么我想在第二个小数位上加1。 我试过用math.round但如果第三小数小于5,它总是四舍五入
下面的代码给了我大约14位小数。我怎样才能把它修剪到小数点后2位?
问题内容: 我想知道如何在不舍入原始数字的情况下输出带两位小数的数字。 例如: 我已经尝试过: 问题答案: 您要使用命令。 https://dev.mysql.com/doc/refman/8.0/zh-TW/mathematical- functions.html#function_truncate