2 回答
TA贡献1831条经验 获得超10个赞
由于您正在模拟工资,因此您可以简单地生成int
以美分为单位的值,然后除以 100(并转换为双倍)以获得结果。像这样:
double salaryPerson = ThreadLocalRandom.current().nextInt(100 * 1000, 100 * (10000 + 1)) / 100d;
这种方法使您免于字符串格式问题,并且如果您希望执行除打印之外的额外操作,还允许您使用精确值处理您的数据。
TA贡献1818条经验 获得超11个赞
有两种方法可以做到这一点,我见过的最常见的方法是基于 C 风格printf。
System.out.printf("%.2f", sal);
printf使用由%运算符决定的修饰符。这个指定它应该打印f带有 2 个小数位 (the .2) 的浮点数(the )。您可以在此处找到运营商列表。
我个人更喜欢 C# 风格 MessageFormat
System.out.println(MessageFormat.format("{0,number,0.00}", sal));
MessageFormat后端 off of DecimalFormatwhich 表示#和上下文中的数字0,其中 a#表示潜在但不是必需的数字,而 a0表示必需的数字。也就是说,如果您传入10指定的格式,它将打印10.00.
编辑:
刚刚意识到它是一个 ArrayList;您将不得不遍历数组的每个成员并单独打印它们。
boolean USE_PRINTF = false;
System.out.print("[");
for(int i = 0; i < salary.size(); ++i)
{
if(USE_PRINTF) { System.out.printf("%.2f", salary.get(i)); }
else { System.out.print(MessageFormat.format("{0,number,0.00}", salary.get(i))); }
if(i < salary.size() - 1) { System.out.print(", "); }
}
System.out.println("]");
添加回答
举报