我有一个整数值,通过蓝牙从PLC设备读取,第一个数字代表一个小数位。例如:100必须格式化为10.0。另一个例子:
500 -> 50.0
491 -> 49.1
455 -> 45.5
以下行将使其成功:
data11.put("Text2", String.format("%.1f", (float)(mArray[18] & 0xFF | mArray[19] << 8) / 10.0));
但是......有没有其他方法可以使用 String.format 而不除以10.0来做同样的事情?
谢谢
答案 0 :(得分:3)
以下方式怎么样?
x = x.substring(0, x.length() - 1) + "." + x.substring(x.length() - 1);
答案 1 :(得分:2)
如果您关注的是浮动表示形式发生的内部舍入,请考虑使用BigDecimal
。像:
***************************
APPLICATION FAILED TO START
***************************
Description:
The bean 'requestMappingHandlerMapping' could not be injected as a 'org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping' because it is a JDK dynamic proxy that implements:
Action:
Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching.
或合并为
BigDecimal v = BigDecimal.valueOf(500,1);
System.out.println(v.toString());
或者您可能需要使用
System.out.println(BigDecimal.valueOf(500,1).toString());
直接回答你的原始问题,即使这样也有效:
System.out.println(BigDecimal.valueOf(500,1).toPlainString());
但真正的问题是,这是否真的需要。
答案 2 :(得分:1)
这个怎么样?
System.out.println(500*0.1);
System.out.println(491*0.1);
System.out.println(455*0.1);
输出
50.0
49.1
45.5
答案 3 :(得分:0)
我会通过整数除法和模数:
private static String format(int value) {
return (value / 10) + "." + Math.abs(value % 10);
}
如果不使用负数,则可以删除 Math.abs()
:
private static String format(int value) {
return (value / 10) + "." + (value % 10);
}
显然这个方法可以内联......