Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 降低双精度_Java_Android - Fatal编程技术网

Java 降低双精度

Java 降低双精度,java,android,Java,Android,我在谷歌上搜索到的所有信息都表明,以下任一项都会将一个双精度整数舍入到小数点后两位 double roundToFourDecimals(double d) { DecimalFormat twoDForm = new DecimalFormat("#.##"); double myD = Double.valueOf(twoDForm.format(d)); return myD; } double nextLon = (double)Math.round(bnext

我在谷歌上搜索到的所有信息都表明,以下任一项都会将一个双精度整数舍入到小数点后两位

double roundToFourDecimals(double d)
{
    DecimalFormat twoDForm = new DecimalFormat("#.##");
    double myD = Double.valueOf(twoDForm.format(d));
    return myD;
}

double nextLon = (double)Math.round(bnextLon * 100.0) / 100.0;
但对我来说都不管用。double的值为
3.3743984E7
,结果相同。
出什么事了?

没什么事
3.3743984E7
是科学符号。即:

3.3743984E7 = 3.3743984 * 10^7 = 33743984
33743984.0四舍五入至小数点后两位为33743984.0。如果您指定了
33743984.05918
,则它将四舍五入为
33743984.06
,但两个输出仍将显示
3.374394E7
。(由于被发现无效,上述评论已被删除。)

一:

275914.1841变为275914.18


我相信你只需要确定你想要什么样的价值,你想要什么样的价值。代码给出的正是您指定的内容。

没有问题
3.3743984E7
是科学符号。即:

3.3743984E7 = 3.3743984 * 10^7 = 33743984
33743984.0四舍五入至小数点后两位为33743984.0。如果您指定了
33743984.05918
,则它将四舍五入为
33743984.06
,但两个输出仍将显示
3.374394E7
。(由于被发现无效,上述评论已被删除。)

一:

275914.1841变为275914.18


我相信你只需要确定你想要什么样的价值,你想要什么样的价值。代码给出的正是您指定的内容。

3.3743984E7
表示
33743984
,因此乘以
100
得到
3374398400
,然后四舍五入不改变任何内容,然后除法返回


你应该除以
1E5
然后取整,而不是取回。

3.3743984E7
意味着
33743984
,所以乘以
100
得到
3374398400
,然后取整不改变任何内容,然后除法返回


你应该除以
1E5
然后取整,而不是取回。

Hmm,你更新了答案。虽然它仍然正确,但我不同意
33743984.06
is
3.374394e7
。小数不一定要四舍五入,也就是说,
33743984.06
3.374398406E7
@Sam-Ah,说得好。我想那是截止日期,但似乎。Eric:将您的第一条指令替换为:double bnextLon=3.1234567E7;你会看到正在发生的事情——它不会发生。如果双精度是在科学记数法中,则不起作用。我得想办法把它转换成十进制记数法。它在内存中的存储方式不同。@user1058647不,没有。它并不是“存储在科学符号中”。该数字在内部表示为
31234567.0
(或多或少),当您打印出来时,它会以科学符号表示,以便于阅读。它已经四舍五入了。Eric,当我用第一条指令运行代码时,它不会四舍五入。我实际上是从一个地质点得到的双倍数据。这个论坛和其他论坛上有很多关于如何将双精度从sci符号转换为十进制符号的讨论。嗯,你更新了你的答案。虽然它仍然正确,但我不同意
33743984.06
is
3.374394e7
。小数不一定要四舍五入,也就是说,
33743984.06
3.374398406E7
@Sam-Ah,说得好。我想那是截止日期,但似乎。Eric:将您的第一条指令替换为:double bnextLon=3.1234567E7;你会看到正在发生的事情——它不会发生。如果双精度是在科学记数法中,则不起作用。我得想办法把它转换成十进制记数法。它在内存中的存储方式不同。@user1058647不,没有。它并不是“存储在科学符号中”。该数字在内部表示为
31234567.0
(或多或少),当您打印出来时,它会以科学符号表示,以便于阅读。它已经四舍五入了。Eric,当我用第一条指令运行代码时,它不会四舍五入。我实际上是从一个地质点得到的双倍数据。这个论坛和其他论坛上有很多关于如何将双精度从sci表示法转换为十进制表示法的讨论。有趣的是,我假设即使双精度的可用“精度”超过了小数点,这种方法仍然有效。有人知道乘法是否会产生效果,但除法却不会(显然,不管怎么说,第一百位早就不存在了,但是…)?有趣的是,我假设这是可行的,即使双精度的可用“精度”超过了小数点。有人知道是否存在一个截止值,乘法会产生效果,但除法不会(显然,不管怎样,第一百位都会消失,但是…?)?