将数字拆分为整数和小数

时间:2014-09-23 02:30:55

标签: java integer decimal

输入23.893将变为INTEGER - 23,DECIMAL - 0.893

以下是我的代码中的关键代码段

double realNumber = scan.nextDouble(); \\store the keyboard input in variable realNumber

double integerPart = Math.floor(realNumber); \\round down eg. 23.893 --> 23

double fractionPart = realNumber - integerPart; \\find the remaining decimal

当我尝试使用长数字时,小数部分与实际部分略有不同。

输入 - 234.324112341234134变为INTEGER - 234.0,

DECIMAL - 0.3241123412341267

2 个答案:

答案 0 :(得分:1)

你的程序逻辑是正确的。问题是您为输入选择的表示。

double本质上是不精确的,因此低位数通常无法正确表示。要解决此问题,您可以使用BigDecimal甚至是String数据类型。

如果您使用BigDecimal,只需使用BigDecimal的方法重写算法即可。如果使用String,则在小数点处拆分用户输入,并在整个部分之后和小数部分之前添加所需的零和小数点。

答案 1 :(得分:1)

如@dasblinkenlight所述,您可以使用BigDecimal中的方法并将它们与分割器组合。我不会计算小数点,更容易坚持使用BigDecimal。

例如:

public static void main(String[] args) {        
    String realNumber = "234.324823783782"; 

    String[] mySplit = realNumber.split("\\.");

    BigDecimal decimal = new BigDecimal(mySplit[0]);
    BigDecimal real = new BigDecimal(realNumber);
    BigDecimal fraction = real.subtract(decimal);

    System.out.println(String.format("Decimal : %s\nFraction: %s", decimal.toString(),fraction.toString()));

}

这输出以下内容: 十进制:234 分数:0.324823783782