输入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
答案 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