如果值为200.3456,则应该将其格式化为200.34。 如果它是200,那么它应该是200.00。
当前回答
如果你只是想打印小数点后有两位数字的double,可以使用这样的方法:
double value = 200.3456;
System.out.printf("Value: %.2f", value);
如果你想将结果以String形式显示,而不是输出到控制台,请使用String.format(),并使用相同的参数:
String result = String.format("%.2f", value);
或者使用类DecimalFormat:
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
其他回答
我认为这样比较简单:
double time = 200.3456;
DecimalFormat df = new DecimalFormat("#.##");
time = Double.valueOf(df.format(time));
System.out.println(time); // 200.35
请注意,这实际上是为您进行舍入,而不仅仅是格式化。
在你的问题中,你似乎也想避免四舍五入的数字?我认为.format()将四舍五入的数字使用一半,afaik? 因此,如果您想四舍五入,200.3456应该是200.35,精度为2。但在你的情况下,如果你只想要前两个,然后放弃剩下的?
您可以将其乘以100,然后转换为int(或取该数字的底),然后再除以100。
200.3456 * 100 = 20034.56;
(int) 20034.56 = 20034;
20034/100.0 = 200.34;
你可能会在边界附近遇到非常非常大的数字。在这种情况下,转换为字符串和子字符串,它将很容易工作。
如果你只是想打印小数点后有两位数字的double,可以使用这样的方法:
double value = 200.3456;
System.out.printf("Value: %.2f", value);
如果你想将结果以String形式显示,而不是输出到控制台,请使用String.format(),并使用相同的参数:
String result = String.format("%.2f", value);
或者使用类DecimalFormat:
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
function Double round2(Double val) {
return new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue();
}
注意toString()!!!!
这是因为BigDecimal转换double的精确二进制形式!!
这些是各种建议的方法及其失败的情况。
// Always Good!
new BigDecimal(val.toString()).setScale(2,RoundingMode.HALF_UP).doubleValue()
Double val = 260.775d; //EXPECTED 260.78
260.77 - WRONG - new BigDecimal(val).setScale(2,RoundingMode.HALF_UP).doubleValue()
Double val = 260.775d; //EXPECTED 260.78
260.77 - TRY AGAIN - Math.round(val * 100.d) / 100.0d
Double val = 256.025d; //EXPECTED 256.03d
256.02 - OOPS - new DecimalFormat("0.00").format(val)
// By default use half even, works if you change mode to half_up
Double val = 256.025d; //EXPECTED 256.03d
256.02 - FAIL - (int)(val * 100 + 0.5) / 100.0;
四舍五入通常不是一个人想要的。相反,应该使用String.format()以所需的格式表示它。
推荐文章
- 找到java类从哪里加载
- 从集合中随机选取一个元素
- 为什么x == (x = y)和(x = y) == x不一样?
- 什么Java 8流。收集等价物可在标准Kotlin库?
- 等待未来的名单
- 如何检查JSON键是否存在?
- 为什么MongoDB Java驱动在条件中使用随机数生成器?
- 即使从未抛出异常,使用try-catch块的代价是否昂贵?
- 什么时候我们应该使用观察者和可观察对象?
- Java中的split()方法对点(.)不起作用。
- Eclipse调试器总是阻塞在ThreadPoolExecutor上,没有任何明显的异常,为什么?
- Java生成两个给定值之间的随机数
- 如何有效地从数组列表或字符串数组中删除所有空元素?
- 比较JUnit断言中的数组,简洁的内置方式?
- codestyle;把javadoc放在注释之前还是之后?