如果值为200.3456,则应该将其格式化为200.34。 如果它是200,那么它应该是200.00。
当前回答
请使用Apache通用数学:
Precision.round(10.4567, 2)
其他回答
我认为这样比较简单:
double time = 200.3456;
DecimalFormat df = new DecimalFormat("#.##");
time = Double.valueOf(df.format(time));
System.out.println(time); // 200.35
请注意,这实际上是为您进行舍入,而不仅仅是格式化。
对于两个四舍五入数字。非常简单,你基本上是更新变量,而不是只是显示的目的,DecimalFormat。
x =数学。地板(x * 100) / 100;
四舍五入通常不是一个人想要的。相反,应该使用String.format()以所需的格式表示它。
最简单的方法,就是做一个这样的魔术;
double val = ....;
val = val*100;
val = Math.round(val);
val = val /100;
如果val从200.3456开始,那么它会变成20034.56,然后四舍五入到20035,然后我们除以它得到200.34。
如果你想总是四舍五入,我们可以通过转换为int型来截断:
double val = ....;
val = val*100;
val = (double)((int) val);
val = val /100;
这种技术适用于大多数情况,因为对于非常大的double(正的或负的),它可能会溢出。但如果你知道你的值将在一个适当的范围内,那么这应该对你有用。
在你的问题中,你似乎也想避免四舍五入的数字?我认为.format()将四舍五入的数字使用一半,afaik? 因此,如果您想四舍五入,200.3456应该是200.35,精度为2。但在你的情况下,如果你只想要前两个,然后放弃剩下的?
您可以将其乘以100,然后转换为int(或取该数字的底),然后再除以100。
200.3456 * 100 = 20034.56;
(int) 20034.56 = 20034;
20034/100.0 = 200.34;
你可能会在边界附近遇到非常非常大的数字。在这种情况下,转换为字符串和子字符串,它将很容易工作。
推荐文章
- 到底是什么导致了堆栈溢出错误?
- 为什么Android工作室说“等待调试器”如果我不调试?
- Java:路径vs文件
- ExecutorService,如何等待所有任务完成
- Maven依赖Servlet 3.0 API?
- 如何在IntelliJ IDEA中添加目录到应用程序运行概要文件中的类路径?
- getter和setter是糟糕的设计吗?相互矛盾的建议
- Android room persistent: AppDatabase_Impl不存在
- Java的String[]在Kotlin中等价于什么?
- Intellij IDEA上的System.out.println()快捷方式
- 使用Spring RestTemplate获取JSON对象列表
- Spring JPA选择特定的列
- URLEncoder不能翻译空格字符
- Java中的super()
- 如何转换JSON字符串映射<字符串,字符串>与杰克逊JSON