我是Java的新手,必须在工作中实施解决方案以计算累积差异。 我正在使用Informatica powercenter从平面文件中提取数据。列之一是部门的总扣除额。在此列中转换数据所需的逻辑如下。
如果总扣除额<= 9999999.99,则按原样显示值,即9999999.99
如果总扣减> 9999999.99,则显示9999999.99,并在下一行显示9999999.99与输入值之间的差。 例如,如果输入值为10000000.99,则显示 9999999.99 1
如果总扣除额= 20000000.98,则显示以下内容 9999999.99 9999999.99 1
我在下面的代码中对值进行硬编码,并且感觉可以动态完成。
package day1.examples;
public class MedicalCenter {
public static void main(String[] args) {
double v=9999999.99;
double i=20000000.98;
if (i<v) {
System.out.println(i);
}
if (i>v && i<=9999999.99*2) {
System.out.println(9999999.99);
System.out.println(i-v);
}
if (i>v && i<=9999999.99*3) {
System.out.println(9999999.99);
System.out.println(9999999.99);
System.out.println(i-9999999.99*2);
};
}
}
示例输出:
9999999.99
9999999.99
1.0
答案 0 :(得分:-1)
您需要继续减去9,999,999.99,直到获得余数,或者可以使用除法。我将向您展示一个减法示例。
public static void main(String[] args) {
double input; //need to implement this
double v=9999999.99;
while(input > v) {
System.out.print(v + " ");
input -= v; //subtract
}
System.out.println(input);
}
这个想法是,您将继续从输入数字中减去v
,直到无法再减去为止,每次减去时,您还将打印出v
和一个空格。减去后,只需打印其余输入即可。
据我所知,除法最终只是一种荣耀的减法形式,因此这可能比使用除法更简单-不仅通过生成更简洁的代码(通常是最高优先级),而且在性能方面
由于减法,您将遇到浮点算术问题,因此您应使用BigDecimal
而不是double
。此处的更多信息:Is floating point math broken?