我的程序的目的是显示员工(经理的编码)的工资,具体取决于该员工在一个月内工作了多少小时。该数组包含3个员工以会计师为参数。每位员工的会计回报。编码器和管理者的工资以不同的方式计算。乘以一个双值与两个短裤的分配结果
这里是我的Java代码:
public class OOP
{
public static void main(String[] args)
{
// fill the staff array with three Employee objects.
Employee[] staff = new Employee[3];
staff[0] = new Manager("Carl Cracker",75000.00,(short)160);
staff[1] = new Coder("Harry Hacker", 50000.00,(short)165);
staff[2] = new Coder("Tony Tester", 40000.00,(short)200);
Accountant Counter = new Accountant();
Counter.printSalary(staff, (byte)2);
}
}
abstract class Employee
{
public Employee(String n, double w, short h)
{
name = n;
wageRate = w;
workedHours = h;
}
public String getName()
{
return name;
}
public double getSalary(short workingHours)
{
this.salary = this.wageRate * (this.workedHours/workingHours);
return salary;
}
private String name;
protected double wageRate;
protected short workedHours;
protected double salary;
}
class Coder extends Employee
{
public Coder (String n, double w, short h)
{
super(n, w, h);
}
public double getSalary(short workingHours)
{
return super.getSalary(workingHours);
}
}
class Manager extends Employee
{
public Manager (String n, double w, short h)
{
super(n, w, h);
}
public double getSalary(short workingHours)
{
if (workingHours > workedHours)
return super.getSalary(workingHours)*0.7;
else
{
salary = wageRate;
return salary;
}
}
}
class Accountant
{
public Accountant()
{
}
public void printSalary(Employee[] emp, byte monthInd)
{
Employee[] workers = emp;
byte MID = monthInd;
MID = (byte) (MID - 1);
for (Employee worker : workers)
{
System.out.printf("%s's salary this month is %8.2f",worker.getName(), worker.getSalary(workingHours[MID]));
System.out.println();
}
}
private short[] workingHours = new short[]{168,160,160,172,162,154,184,168,168,184,168,172};
}
预期结果:
卡尔饼干的这个月的工资是75000
哈利黑客这个月的工资为51562.5
托尼计的薪水此月是50000
实际值r esult:
卡尔饼干的这个月的工资是75000,00
哈利黑客这个月的工资是50000,00
托尼Tester的这个月的工资是40000,00
请能有人给我解释一下为什么?
只是一个值得注意的问题,你应该非常小心使用浮点数来表示货币的,看到接受回答http://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency为什么 – 2013-04-24 22:17:16
@AngeloGenovese我想一个更简洁的警告是你d不要先把它们四舍五入来显示它们...... – 2013-04-24 22:38:31
@JuanMendes错误可以叠加,有足够多的变化可以在某些地方丢失一分钱。就我个人而言,我更喜欢使用BigDecimal或一个整数类型来保存最小的重要值(例如美分),但这是一个意见问题,这就是为什么我将这个问题与涉及一系列解决方案的争论联系起来。 – 2013-04-24 23:59:49