用小数点格式化整数



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);
}

显然,该方法可以被内衬...

最新更新