将小数点移动到double

时间:2013-10-11 10:35:25

标签: java

我有这段代码:

Long dval = new Long((new Date()).getTime());
System.out.println("ogval:"+dval);
Double dd = (double)dval;
System.out.println("dval:"+dd);

这是输出:

ogval:1381490769636
dval:1.381490769636E12

当我将值转换为Double时,它会添加一个小数点。我可以进行类型转换并将值设置为double吗?

所需的输出是:

ogval:1381490769636
dval:1381490769636

我有一个函数,其参数只接受double值。当我尝试传递时间戳时,它传递方法内的十进制值。 我无法编辑该函数,因为它是某个包的内置函数。

4 个答案:

答案 0 :(得分:2)

简单的答案是否定的。

浮动类型可以包含一些任意值的整数,由浮点数的存储方式给出。如果数字太大,则会转换为十进制数。

如果您需要使用大整数值,请使用BigInteger class。

检查这些不完美的好工具是float converter。 在浮点转换器中尝试123456789,它不会被准确存储。

答案 1 :(得分:2)

使用DecimalFormat,例如:

    Long dval = new Long((new Date()).getTime());
    System.out.println("ogval:" + dval);
    Double dd = (double) dval;
    DecimalFormat format=new DecimalFormat("##########");
    System.out.println("dval:" + format.format(dd));

答案 2 :(得分:2)

您的问题不在于您使用的类型,而在于您使用的格式。目前,使用默认格式,因为string + double隐式调用Double.toString,使用科学记数法将您的特定double转换为String。如果您希望使用printf或Java提供的任何其他格式化方法,您可以强制使用不同的格式:

System.out.printf("dval: %12.0f", dd);

demo

答案 3 :(得分:1)

作为替代方案,您可以尝试使用bigdecimal

        Long dval = new Long((new Date()).getTime());
        System.out.println("ogval:"+dval);
        Double dd = (double)dval;
        System.out.println("dval:"+dd);
        BigDecimal bd = new BigDecimal(dval);
        System.out.println("bdval:"+bd.toPlainString());