Java 四舍五入小数点

Java 四舍五入小数点,java,decimal-point,Java,Decimal Point,可能重复: 我正在尝试将十进制度数(23.1248)转换为分钟式度数(23.7'29.3”)。 这就是我到目前为止所做的: double a=23.1248; int deg=(int)a;//gives me the degree float b=(float) (a-deg); int min=(int) (b*60);//gives me the minutes double sec= (double) ((c*60)-min);//gives me my

可能重复:

我正在尝试将十进制度数(23.1248)转换为分钟式度数(23.7'29.3”)。 这就是我到目前为止所做的:

   double a=23.1248;
   int deg=(int)a;//gives me the degree
   float b=(float) (a-deg);
   int min=(int) (b*60);//gives me the minutes
   double sec= (double) ((c*60)-min);//gives me my seconds

一切正常,但我想将秒数舍入到最接近的十分之一或百分之一。我已经看过十进制格式,但不想将其转换为字符串。我也看过bigdecimal,但不认为这会有帮助,

首先,有库函数可以做到这一点,所以为什么不直接使用它们呢?参见Math.round()。无需重新发明轮子。不过,如果你想,你可以尝试以下方法。要将双人自行车转到第一百位:

x = 0.01 * floor(x * 100.0)
x = 0.1 * floor(x * 10.0)
将双人四舍五入到第十位:

x = 0.01 * floor(x * 100.0)
x = 0.1 * floor(x * 10.0)
要将双精度旋转到10^k位置,请执行以下操作:

x = 10^k * floor(x / 10^k)
任何语言(包括Java)的实现都应该是简单的。问题是,它并不是真正的四舍五入,而是截断到您的位置。要解决这个问题,您只需在四舍五入之前将数字加上0.5*10^k。如果您只想四舍五入,请使用上述版本,并在计算之前或之后加上10^k。

在放大数字后尝试使用,然后再缩小

double x = 1.234;
double y = Math.round(x * 100.0) / 100.0; // => 1.23
如果你想成为真正的重量级拳手,也可以使用:

BigDecimal a = new BigDecimal("1.234");
BigDecimal b = a.setScale(2, RoundingMode.DOWN); // => BigDecimal("1.23")

jsI中有一种舍入方法,认为小数点已经是舍入的了。减号、加号和除法都是平的:)要“舍入到100”,只需使用“Math.round()”:double x=round(y/100.0)*100.0;BigDecimal很好,您可以创建一个舍入(数字、小数)函数类似于此答案中的函数。试试看,我不明白为什么它不起作用。你不想用round()代替floor()?如果是1dp,我希望0.193被四舍五入到0.2。@brainzzy我讨论了如何使用floor()实现与round()和天花()相同的效果基本上,如果他想要四舍五入到最近的数字(而不是总是向上或向下),round()应该可以工作。