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