0

我有这个代码:

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 时,它​​会添加一个小数点。我可以进行类型转换并按原样获得双倍的值吗?

所需的输出将是:

ogval:1381490769636
dval:1381490769636

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

4

4 回答 4

2

您的问题不在于您使用的类型,而在于您应用的格式。目前,使用默认格式,因为string + double隐式调用Double.toString,它将您的具体转换doubleString使用科学记数法。如果您愿意,可以使用printfJava 提供给您的任何其他格式化方法来强制使用不同的格式:

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

演示

于 2013-10-11T10:42:18.397 回答
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));
于 2013-10-11T10:39:39.953 回答
2

简单的答案是否定的。

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

如果您需要使用大整数值,请使用BigIntegerclass.

检查这些缺陷的好工具是这个浮动转换器。在浮点转换器中尝试 123456789 ,它不会被准确存储。

于 2013-10-11T10:38:21.113 回答
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());
于 2013-10-11T10:38:08.530 回答