Java Round decimal - 特定情况下的第二个小数零

时间:2017-10-13 13:56:18

标签: java rounding

鉴于这个数字:

  • 150.00
  • 150.26

我需要像这样回合:

  • 如果小数部分的第二个值为零(0),则新值应为150.0
  • 如果小数部分的第二个值不等于零(0),则新值保留两位小数例如:150.26

是否有可以执行此操作的舍入方法?

感谢。

我的代码在这里:

String monto = "150.10";//150.26
String nuevoMonto = "";
String[] valores = monto.split("\\.");
System.out.println("Valores : " + valores);
System.out.println("Valores length: " + valores.length);
for (int i = 0; i < valores.length; i++) {
  System.out.println("-->Valor: " + valores[i]);
}
if (valores.length == 2) {
  nuevoMonto = valores[1];
  System.out.println("Nuevomonto: " + nuevoMonto);
  if (nuevoMonto.length() == 2) {
    System.out.println("Dos posiciones decimales");
    System.out.println(nuevoMonto.indexOf("0"));
    if (nuevoMonto.indexOf("0") == 1) {
      nuevoMonto = valores[0] + "." + nuevoMonto.substring(0, 1);
    }
  }

}

System.out.println("Nuevo monto: " + nuevoMonto);

3 个答案:

答案 0 :(得分:3)

尝试这样的事情:

DecimalFormat decimalFormat = new DecimalFormat("#.0#");
System.out.println(decimalFormat.format(150.09));
System.out.println(decimalFormat.format(150.10));

新的十进制格式内的字符串允许修剪#,并强制0 s

答案 1 :(得分:0)

如果你有一个字符串开头,也许没有必要将它解析为浮点数,然后重新格式化它。另一种方法是使用正则表达式:

String monto = "150.10";
String nuevoMonto = monto.replaceAll("(?<=\\.\\d)0$", "")

正则表达式由两部分组成。第一部分(?<=\\.\\d)表示匹配需要以点和数字开头。第二部分0$匹配字符串末尾的尾随零。我们什么都不用。

答案 2 :(得分:0)

在Java中有一个称为floor方法的表达式,可用于始终将具有任何形式的舍入值的值带到整数值,并从数据中删除任何相关的小数点 对此进行简单的检查是获取数据并检查数据是否为模数或模零 示例代码可能如下所示。

if ((monto % 0.1 ) == 0)
{
   //has no relevant data so it should be floored
   Nuevomonto = floor (monto);
}
else 
{
Nuevomonto = monto;
}
希望有所帮助。