我如何休息应用于BigDecimal的变量

时间:2015-06-01 15:17:18

标签: java rounding bigdecimal

我正在编写一个测试程序来测试RoundDeMethod for BigDecimal。我对Java比较陌生(我只在这里工作了五天!!)。我在DrJava中编写了一个类来测试它,但是已经将pp指定为BigDecimal的变量,我如何将不同的RoundingMethod应用于相同的变量以获得最终结果?

import java.math.*;
import java.util.Scanner;
//import java.text.*;
//import java.util.*;

public class TestRounding{
public static void main(String args[]){
BigDecimal pp; //declare variable pp=pounds pence inp=monetary input
Scanner scan = new Scanner (System.in);
System.out.println( "ENTER POUNDS AND PENCE TO AT LEAST FIVE   DECIMAL PLACES :" );

 pp= scan.nextBigDecimal();

 pp=pp.setScale(2,RoundingMode.HALF_EVEN);
 System.out.println("HALF_EVEN: "+pp.toString());
 pp=pp.setScale(2,RoundingMode.FLOOR);
 System.out.println("FLOOR: "+pp.toString());
 pp=pp.setScale(2,RoundingMode.CEILING);
 System.out.println("CEILING: "+pp.toString());

 }
 }

1 个答案:

答案 0 :(得分:0)

在更改舍入方法的代码中,您将已经舍入的值传递给下一步。例如,值被HALF_EVEN四舍五入到两个位置,然后这个已经舍入的值(2个位置)被传递到FLOOR步骤,依此类推。

要获得您期望的行为,请在每次调用舍入方法时创建新的BigDecimal变量。然后,您可以继续使用每个变量的原始输入值:

    BigDecimal pp1 = pp.setScale(2, RoundingMode.HALF_EVEN);
    System.out.println("HALF_EVEN: "+pp1.toString());
    BigDecimal pp2 = pp.setScale(2,RoundingMode.FLOOR);
    System.out.println("FLOOR: "+pp2.toString());
    BigDecimal pp3 = pp.setScale(2,RoundingMode.CEILING);
    System.out.println("CEILING: "+pp3.toString());