i具有一个整数值,该数字通过蓝牙从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?
谢谢
以下方式怎么样?
x = x.substring(0, x.length() - 1) + "." + x.substring(x.length() - 1);
如果您的担忧是浮点表示发生的内部舍入,请考虑使用BigDecimal
。喜欢:
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());
并直接回答您的原始问题,即使这有效:
BigDecimal v11 = BigDecimal.valueOf(mArray[18] & 0xFF | mArray[19] << 8,1);
data11.put("Text2", String.format("%.1f", v11));
,但真正的问题是,这是否确实需要。
怎么样?
System.out.println(500*0.1);
System.out.println(491*0.1);
System.out.println(455*0.1);
输出
50.0
49.1
45.5
我会通过Integer Division和Modulo进行:
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);
}
显然,该方法可以被内衬...