如何将大浮点数转换为int

时间:2014-04-21 18:21:48

标签: java php int

我在javaphp写了一个程序。其中loop运行64次。并继续添加n to n

Java代码:

  public static void main(String[] args) {
    double n = 1;
    double p = 1;
    for(int i = 1;i <= 64;i++){
        n = n + n;
        p = p + n;
    }
    System.out.println(p);
}

PHP代码:

<?php
    $n = 1;
    $p = 0;
    for($i = 1;$i <= 64;$i++){
        $n = $n + $n;
        $p = $p + $n;
    }
    echo($p);

?>

这两个的输出是:

3.6893488147419E+19

现在我想知道是否可以将这个大浮点数转换为int?如果是,那怎么样。用这两种语言。

3 个答案:

答案 0 :(得分:2)

我会使用BigInteger类型,

public static void main(String[] args) {
    BigInteger n = BigInteger.ONE;
    BigInteger p = BigInteger.ONE;
    for(int i = 1;i <= 64;i++){
        n = n.add(n);
        p = p.add(n);
    }
    System.out.println(p);
}

输出

36893488147419103231

修改根据您的评论,您真的想要更像The Legend of the Chessboard的内容 -

BigInteger n = BigInteger.ONE;
BigInteger p = BigInteger.ZERO;
BigInteger TWO = new BigInteger("2");
for (int i = 1; i <= 64; i++) {
    StringBuilder sb = new StringBuilder();
    sb.append("For square #: " + i);
    sb.append(", Grains on square: " + n);
    p = p.add(n);
    n = n.multiply(TWO);
    sb.append(", Running Total: " + p);
    System.out.println(sb.toString());
}

答案 1 :(得分:1)

该数字太大,无法容纳long。要获得最接近的积分近似值,请通过doubleBigInteger转换为BigDecimal

BigDecimal bd = BigDecimal.valueOf(p);
BigInteger bi = bd.toBigInteger();

但是,要获得准确的结果,请使用BigIntegers执行所有计算:

import static java.math.BigInteger.ONE;

BigInteger n = ONE;
BigInteger p = ONE;
for (int i = 1; i <= 64; i++) {
    n = n.add(n);
    p = p.add(n);
}
System.out.println(p);

近似值和精确值之间的差异是:

36893488147419103000
36893488147419103231

答案 2 :(得分:0)

Java:Math.round(float),PHP:round(value,precision)但是你会精确