如何检查一个数字的小数位数是否在千分之一或更大



我正在开发一个程序,该程序打印出工人的工资,包括加班费。我几乎完成了这个程序。然而,我被困在如何创造一个条件,将工资中的小数位数固定在(.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;,但没有用。

下面的代码注释是应该输入的值。

代码

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
}
}

不要对任何将持有货币的变量使用分数或浮点值。由于浮点的存储方式,对浮点的操作会给您带来意外的结果。你认为1.2是1.2,但实际上可能是1.19999999。浮子就是这样工作的。我建议在处理金钱问题时不要太过挑剔。用130美分代替1.30美元。

为了显示目的,转换它是微不足道的:

private static DecimalFormat df = new DecimalFormat("#.##");
Syste.out.println(df.format(yourDouble));

看看这个数字有多少小数。

String[] split = yourDouble.toString().split("\.");
split[0].length();   
split[1].length();

最新更新