2013-06-07 6 views
2

У меня есть строка salePrice, которая может иметь значения, такие как 29.90000,91.01000, и я хочу получить вывод, как 29.90,91.01, как и две цифры после десятичных точек. Я использую строку.Как удалить завершающие нули из строки?

+9

это конечные нули, а не ведущие нули –

+3

Есть ли что-нибудь, что вы сделали, чтобы попытаться решить эту проблему Лем? Мы будем более охотно отвечать на ваш вопрос, если вы скажете нам, что вы пробовали до сих пор. (Полезные ссылки для уточнения вопросов: [ask], [FAQ]) – Doorknob

+2

@ Raedwald Не дуп; этот вопрос хочет сохранить последние две цифры – Doorknob

ответ

5
int lastIndex = salePrice.indexOf(".") + 2 
salePrice = salePrice.substring(0, lastIndex); 
8

Попробуйте это ...

DecimalFormat df2 = new DecimalFormat("#,###,###,###.##"); 
double dd = 100.2397; 
double dd2dec = new Double(df2.format(dd)).doubleValue(); 
+0

+1, но это не должно быть '#, ###, ###, ###. ## '? Потому что число не всегда заканчивается '0,00' – Doorknob

+0

@Doorknob Jeje ... Исправлено ... –

+0

на самом деле это должно быть« 0.00 »вместо того, чтобы зафиксировать 2 цифры после десятичной точки –

14

Одним из возможных решений

new BigDecimal("29.90000").setScale(2).toString() 

Или, если вам нужно округлить

new BigDecimal("29.90100").setScale(2, RoundingMode.HALF_UP).toString() 

Использование BigDecimal, потому что преобразование из строки удваивать теряйте точность!

Выберите режим округления, соответствующий вашему корпусу.

+1

+1. 'BigDecimal' часто пропускается. – fge

+1

О, между прочим, это «потерять»: p Но «двойная» действительно потеряла точность: p – fge

+1

@fge, ** Хороший ответ ** должен быть правильным и смешным **! –

2

вы можете использовать

String.format("%.2f", value); 
+0

@yannishristofakis Спасибо за share.value - общий термин при представлении некоторого значения. И преобразование значения в строку не является большим делом. Так что давайте ждать ответа OP, погоды, которую он может получить или нет. Хороший день. –

1

Вы можете использовать Apache Commons Mathematics Library

NumberFormat nf = NumberFormat.getInstance(); 
    nf.setMinimumFractionDigits(2); 
    nf.setMaximumFractionDigits(2); 
    ComplexFormat cf = new ComplexFormat(nf); 
    Complex complex = cf.parse("29.90000"); 
+0

+1. –

0

Вот старая школа путь, который соответствует ваш вопрос (вы всегда хотите 2 знака после запятой)

public class LearnTrim 
{ 
    public static void main(final String[] arguments) 
    { 
     String value1 = "908.0100"; 
     String value2 = "876.1"; 
     String value3 = "101"; 
     String value4 = "75.75"; 
     String value5 = "31."; 

     System.out.println(value1 + " => " + trimmy(value1)); 
     System.out.println(value2 + " => " + trimmy(value2)); 
     System.out.println(value3 + " => " + trimmy(value3)); 
     System.out.println(value4 + " => " + trimmy(value4)); 
     System.out.println(value5 + " => " + trimmy(value5)); 
    } 

    private static String trimmy(final String value) 
    { 
     int decimalIndex; 
     String returnValue; 
     int valueLength = value.length(); // use StringUtils.length() for null safety. 

     decimalIndex = value.indexOf('.'); 
     if (decimalIndex != -1) 
     { 
      if (decimalIndex < (valueLength - 3)) 
      { 
       returnValue = value.substring(0, valueLength - 2); 
      } 
      else if (decimalIndex == (valueLength - 3)) 
      { 
       returnValue = value; 
      } 
      else if (decimalIndex == (valueLength - 2)) 
      { 
       returnValue = value + "0"; 
      } 
      else // decimalIndex == valueLength - 1 
      { 
       returnValue = value + "00"; 
      } 
     } 
     else 
     { 
      returnValue = value + ".00"; 
     } 

     return returnValue; 
    } 
} 

Смежные вопросы