固定初始值的累计差额

时间:2019-01-21 22:19:35

标签: java

我是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

1 个答案:

答案 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?