在Java ME中将double加倍到5位小数

Kev*_*oyd 10 java rounding java-me

如何在不使用DecimalFormat?的情况下将双精度数转换为5位小数?

Jor*_*ren 14

您可以通过乘以数字将其作为第一个小数位来舍入到小数点后五位.然后进行正常舍入,再次将其作为小数点后第五位.

假设圆的值是一个double名为x:

double factor = 1e5; // = 1 * 10^5 = 100000.
double result = Math.round(x * factor) / factor;
Run Code Online (Sandbox Code Playgroud)

如果你想四舍五入到小数点后6位,让factor1e6,等等.

  • J2ME中没有`Math.round()`. (4认同)
  • -1:不敢相信这会被投票那么多,因为这根本不是真正的四舍五入.请参阅Jon的答案. (3认同)

Jon*_*eet 10

无论你做什么,如果你得到一个double值,它不可能正好是 5位小数.这不是二进制浮点运算的工作方式.你要做的最好的是" 最接近原始值的双精度值四舍五入到小数点后5位".如果要打印出该double 的确切值,它仍可能有超过5个小数位.

如果你真的想要精确的十进制值,你应该使用BigDecimal.

  • 不管你做什么,你也不会在Java ME使用`BigDecimal` - 因为没有这样的东西 - 无论是在[CLDC](http://en.wikipedia.org/wiki/Connected_Limited_Device_Configuration)也不[CDC(HTTP:/ /en.wikipedia.org/wiki/Connected_Device_Configuration)个人资料 (4认同)

Tho*_*thy 8

乘以100000.加0.5.截断为整数.然后除以100000.

码:

double original = 17.77777777;
int factor = 100000;
int scaled_and_rounded = (int)(original * factor + 0.5);
double rounded = (double)scaled_and_rounded / factor;
Run Code Online (Sandbox Code Playgroud)