我正在开发一个功能,我计算的仪表单位数量。仪表计算规则如下:
我写的函数是:
public static void CalculateAutoFare(int kmIndex) {
double fare = 12.00;
double night = 15.00;
double subseIncre = 1.50;
double nightIncre = 0.25;
int j=0;
for (int i=1; i <= kmIndex; i++) {
if (i == 3 || j == 4) {
fare += 1.00f;
j =0;
}
else {
fare += subseIncre;
j++;
}
fare = Math.round(fare*2f)/2f;
double extra = ((double) fare * nightIncre);
night = fare + extra;
night = Math.round(night*2f)/2f;
System.out.println("I = " + i + " Fare = " + fare + " Night = " + night + " 25%Extra = " + extra);
}
System.out.println("Day = " + fare + " Night = " + night);
}
kmIndex是km的指数。仪表读数分别为1.00,1.10,1.20,1.30 ...... 1.90,2.00 ......因此kmIndex为1.00 = 0,1.10 = 1,1.20 - 3等等。
我按照代码获得的结果应该如下所示:
我已经工作到4.00并且结果不正确被宣布为不应该与白天或夜晚相关。
我在这方面做了很多工作,但无法按预期获得结果。如果我试图纠正1件事,那么其他人会出错或者没有给出预期的结果。任何人都可以帮我解决这个问题。几乎整天都在努力解决这个问题。
答案 0 :(得分:1)
我已经分析了工作表,但我还没有找到一个公式来显示那里显示的结果。似乎某些值有一些舍入差异。我意识到只有25或75美分的价值不同。例如,你计算了18,5,它应该是19(结果是18,75,你向下舍入到18,5,但它应该四舍五入到19)。 因此,如果您没有用于创建表的原始公式,我认为确保结果与工作表匹配的唯一方法是对其进行硬编码。这不是一个优雅的解决方案,但它保证了正确的结果。
答案 1 :(得分:0)
代码中的小调整就行了。你想要0.75一轮为.5而不是乘以它乘以它的直接较小的浮点数。
{
double fare = 12.00;
double night = 15.00;
double subseIncre = 1.50;
double nightIncre = 0.25;
int j=0;
for (int i=1; i <= 22; i++) {
if (i == 3 || j == 4) {
fare += 1.00f;
j =0;
}
else {
fare += subseIncre;
j++;
}
double extra = ((double) fare * nightIncre);
night = fare + extra;
;
System.out.println("I = " + i + " Fare = " + fare + " Night = " + night + " 25%Extra = " + extra);
}
System.out.println("actual Day = " + fare + " Night = " + night);
fare = Math.round(fare*1.99f)/2f;
night = Math.round(night*1.99f)/2f;
System.out.println("rounded Day = " + fare + " Night = " + night);
}