的Java回合十进制 - 特殊情况下的第二个小数点零个

问题描述:

鉴于此号码:的Java回合十进制 - 特殊情况下的第二个小数点零个

  • 150.00
  • 150.26

我要圆这样的:

  • 如果第二个值的小数部分为零(0),那么新值应为150.0
  • 如果t他小数部分的第二个值不是零(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); 
+0

很难知道你真正想要什么,也请显示你到目前为止尝试过的。如果你正在用钱工作,这可能是一个非常武断的方法来整合价值。 '150.10 - > 150.10 ... 150.09 - > 150.00'会有很大的差异。那么你为什么要这样做? – hamena314

+1

@ hamena314他说**第二**值小数部分...所以150.10 - > 150.1和150.09 - > 150.09 –

+1

150.101怎么样?或者,也许这“不可能发生”? – Stefan

尝试这样的事:

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

新的十进制格式字符串里面允许# s到修剪,以及0 s的被迫留

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

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

正则表达式由两部分组成。第一部分(?<=\\.\\d)表示比赛需要以点和数字开头。第二部分0$匹配字符串末尾的尾部零。我们将它替换为无。

在Java中有一个叫做floor方法的表达式,它可以用于总是将任何形式的舍入值转换为一个整数值,并从数据中删除任何相关的小数点 这个简单的检查是要采取的数据并检查数据是否不是模数或模数为零 示例代码可能如下所示。

if ((monto % 0.1) == 0) 
{ 
    //has no relevant data so it should be floored 
    Nuevomonto = floor (monto); 
} 
else 
{ 
Nuevomonto = monto; 
} 

希望有帮助。