【问题标题】:Formatting Integer with a decimal point格式化带小数点的整数
【发布时间】:2017-03-15 03:24:00
【问题描述】:

我有一个通过蓝牙从 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?

谢谢

【问题讨论】:

  • 不分割?我不相信,不。检查this SO answer
  • 为什么?分割有什么问题?
  • 您能否提供更多有关myArray 内容的详细信息,您想要做的事情也许可以通过字节操作来实现
  • 你计算的是十分之一的东西,所以你可以乘以0.1吗?
  • 感谢您的回答。我是 Java 新手,我想知道 String.format 是否可以在不使用任何额外操作的情况下产生相同的结果。

标签: java formatting decimal-point


【解决方案1】:

下面的方法怎么样?

x = x.substring(0, x.length() - 1) + "." + x.substring(x.length() - 1);

【讨论】:

  • 我喜欢。如果数字为 0,它不会给出我认为你想要的,但如果需要,可以使用if-else 处理这种特殊情况。
【解决方案2】:

如果您担心浮点表示发生的内部舍入,请考虑使用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));

但真正的问题是这一切是否真的需要。

【讨论】:

    【解决方案3】:

    这个怎么样?

    System.out.println(500*0.1);
    System.out.println(491*0.1);
    System.out.println(455*0.1);
    

    输出

    50.0                                                                                                                                                                                                  
    49.1                                                                                                                                                                                                  
    45.5 
    

    【讨论】:

      【解决方案4】:

      我会通过整数除法和取模:

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

      显然方法可以内联...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-10
        相关资源
        最近更新 更多