【发布时间】:2020-09-30 22:04:23
【问题描述】:
我正在开发一个程序,该程序可以打印工人所赚取的工资,包括加班费。我几乎完成了这个程序。但是,我被困在如何设定条件将工资中的小数位固定到十分位和百分之一(.00)。
我想要的条件是,如果工作小时数大于 40 并且加班工资有千分之一或更多的数字(overTimeWages has .000 or more .0000000000....),那么System.out.println("$" + (Math.floor(overTimeWages * 100) / 100)); 将overTimeWages 舍入到最接近的百分之一。我只想要十分位和百分之一的值。否则如果工作时间大于 40 并且加班工资只有十分位和百分之一的数字,那么System.out.println("$" + overTimeWages + 0);。
我如何在上面设置这个条件?
我尝试了overTimeWages % 0.1 != 0;,但没有成功。
下面的代码 cmets 是应该输入的值。
代码
import java.util.Scanner;
int payRateInCents, payRateInDollars,
hoursWorked,
overTimeHours, grossPayWithInt;
double grossPay, payRCents, payRDollars, overTimeRate;
grossPay = (double) ((payRDollars * hoursWorked));
grossPayWithInt = (payRateInCents * 40);
double grossPayWithOverTime = (double) ((grossPayWithInt) + (overTimeRate * overTimeHours));
double overTimeWages = (double) (grossPayWithOverTime / 100);
/**
2000 45 = (2000 * 40) + ((2000 * 1.5) * (45 - 40)) == 95000
2000 45 = (grossPayWithOverTime) + ((overTimeRate) * (overTimeHours)) == 95000
Then divide by 100.
2000 40 should get: $800.00
1640 41 should get: $680.60
3111 43 should get: $1384.39
1005 1 should get: $10.05
**/
if(hoursWorked > 40) {
if(overTimeWages % 0.1 != 0) {
System.out.println("$" + (Math.floor(overTimeWages * 100) / 100));
} else {
System.out.println("$" + overTimeWages + 0);
}
}
else {
if(hoursWorked < 10) {
System.out.println("$" + grossPay);
} else {
System.out.println("$" + grossPay + 0);//40 or lower
}
}
【问题讨论】:
-
doubles 和floats 并不总是有精确的值,所以如果你真的关心 sig figs 和所有的东西,你可能想要使用类似BigDecimal -
如何在 if 语句中使用
BigDecimal? -
你到底想在这里做什么?测试“如果它有超过 2 个小数位”是没有意义的——这是一个渲染问题,而不是数据问题。您是要将值四舍五入到最多 2 位小数,还是只显示 2,还是什么?