2017-10-13 77 views
0

鑑於此號碼:的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

回答

3

嘗試這樣的事:

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

新的十進制格式字符串裏面允許# s到修剪,以及0 s的被迫留

0

如果你有一個字符串開頭,也許沒有意義將它解析爲一個浮點數,然後重新格式化它。另一種方法是對此使用正則表達式:

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

正則表達式由兩部分組成。第一部分(?<=\\.\\d)表示比賽需要以點和數字開頭。第二部分0$匹配字符串末尾的尾部零。我們將它替換爲無。

0

在Java中有一個叫做floor方法的表達式,它可以用於總是將任何形式的舍入值轉換爲一個整數值,並從數據中刪除任何相關的小數點 這個簡單的檢查是要採取的數據並檢查數據是否不是模數或模數爲零 示例代碼可能如下所示。

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

希望有幫助。