我需要将一些双打舍入到3到4位小数.我尝试了3种不同的方法,但都没有.
对于我所拥有的大部分双倍,它都有效,但无论如何我仍然有这样的双打:
到目前为止我尝试了以下方法:
-- 1
(double) Math.round(someDouble * 10000) / 10000
-- 2
DecimalFormat twoDForm = new DecimalFormat("0.0000");
twoDForm.format(someDouble);
-- 3
BigDecimal bd = new BigDecimal(someDouble);
bd = bd.setScale(4, BigDecimal.ROUND_HALF_UP);
Run Code Online (Sandbox Code Playgroud)
有没有人有我正在寻找的神奇解决方案:)?
谢谢 !
注意:这是完整的代码:
// Processing
long start = System.nanoTime();
for (int i = 0; i < loopSize; i++) {
process();
}
// end timer
long absTime = System.nanoTime() - start;
double absTimeMilli = absTime * 1e-6;
DecimalFormat t = new DecimalFormat("###.####");
context.setTotalTime(Double.valueOf(t.format(absTimeMilli)));
context.setUnit(TimeUnit.SECONDS);
context.setMeanTime(Double.valueOf(t.format(absTimeMilli / Const.BENCH_LOOP_COUNT)));
context.setExecPerTimeUnit(Double.valueOf(t.format(loopSize / (absTimeMilli*1e-3))));
Run Code Online (Sandbox Code Playgroud)
如果要存储结果回成double类型(您的第一个例子暗示你),然后会出现这种情况.Double不能存储一些数字.
舍入后,将结果存储在a BigDecimal或a中String.
更新 - 请参阅下面的评论
可能误解了你的评论,但是这样的话.
// this.totalTime += (1.0/someInteger)*myValue BigDecimal ratio = BigDecimal.ONE.divide(new BigDecimal(someInteger)); totalTime = totalTime.add(ratio.multiply(myValue));
| 归档时间: |
|
| 查看次数: |
402 次 |
| 最近记录: |