Java 四舍五入一个大小数

Java 四舍五入一个大小数,java,rounding,bigdecimal,Java,Rounding,Bigdecimal,我正在尝试对这样的双精度值进行四舍五入:1.14593409534253205304203E-14 我不知道E-14是什么意思。。。 我希望它是1.1。我就是这样尝试的: speed = (distanceupdate / 1000) / (milliseconds * 3600000); speed2 = speed2 + speed; speed3++; BigDecimal speed4 = new BigDecimal(speed).setScale(1, RoundingMode.H

我正在尝试对这样的双精度值进行四舍五入:1.14593409534253205304203E-14 我不知道E-14是什么意思。。。 我希望它是1.1。我就是这样尝试的:

speed = (distanceupdate / 1000) / (milliseconds * 3600000);
speed2 = speed2 + speed; speed3++;

BigDecimal speed4 = new BigDecimal(speed).setScale(1, RoundingMode.HALF_EVEN);
double speed5 = speed4.doubleValue();
我以前为另一个值做过,它起作用了,但在这个值中,is不起作用。 我检查过,值“速度”不是空的,它总是>0。
speed5总是空的=[/p>你不能使一个double正好等于1.1。double必须是2-1/2、1/4、1/8、1/16或其组合的逆幂。它不能是1/10。

在四舍五入时尝试将其转换为int,然后再将其转换为double

double speed = 1.14593409534253205304203 * Math.pow(10, -14); // equals 1.145934095342532E-14
int speedInt = (int) Math.round(speed * Math.pow(10, 15)); // equal 11
speed = speedInt / 10.0; // equals 1.1

此外,E-14零件适用于1.14593409534253205304203×10^−14.

我不知道你的速度类型是什么,但根据你指定的确切值,我写了这个,得到了1.1作为答案

import java.math.BigDecimal;
import java.math.RoundingMode;
public class Example{
    public static void main(String[] args) {
       double speed = 1.14593409534253205304203;
       BigDecimal speed4 = new BigDecimal(speed).setScale(1, RoundingMode.HALF_EVEN);
       double speed5 = speed4.doubleValue();
       System.out.println("Value : " + speed5);
   }
}
输出:

( ô_ô)σ : java Example
  Value : 1.1

还有,是的
(ôôσ
是我的命令提示符。

毫秒是长的,距离更新是双精度的,speed1,speed2,speed4,speed5=double尝试一下@MrEngineer13所做的事情,应该对你有用。E是一种符号,可以帮助你写出太长/太短而不能方便地以十进制形式写入的数字。我试过了,但没用。我编辑了我的message,速度值约为1.123293242309234E-14。我不知道E-14是什么意思。将其设置为反映1.123293242309234E-14的速度值