Próbuję przekonwertować wprowadzenie do obiektów i mam problemy z konwersją poniższego ciągu do BigDecimal. Dostaję 87,00, ponieważ 0 autorstwa są ignorowane. Eksperymentuję z dziesięciomaformatami. Każda pomoc jest doceniana. Dzięki!

Na przykład. 0087 musi zostać przekonwertowany na 00.87

0
Mjasmin 1 marzec 2019, 17:26

2 odpowiedzi

Najlepsza odpowiedź

Wydaje się, że wskazujesz w komentarzach, że początkowy ciąg, "0087" jest reprezentacją stałej z dwoma miejscami dziesiętnymi, istnieją zatem ukryty punkt dziesiętny przed dwiema cyframi. Jest kilka sposobów konwersji do odpowiedniego {x1}}, ale ja, poszedłbym z tym:

BigDecimal result = BigDecimal.valueOf(Long.parseLong("0087"), 2);

Kluczem tutaj jest zrozumienie, że BigDecimal S ma dwie właściwości charakterystyczne: dowolna długość sekwencji cyfr dziesiętnych, a skala przenoszenie wartości miejsca najmniejszą cyfry, w forma liczby cyfr na prawo od punktu dziesiętnego. Szczególną metodą fabryki zademonstrowano powyżej akceptuje te jako oddzielne argumenty, choć działa tylko wtedy, gdy cyfry ciąg jest wystarczająco krótki, aby być reprezentowany jako long. 2 odpowiada bezpośrednio z liczbą (domyślnie) cyfr ułamkowych w twoim wejściu.

Wydanie Powstały BigDecimal jako "00.87" zamiast "0,87" jest osobną kwestią, ale do wykonania, jeśli to naprawdę coś, co chcesz.

0
John Bollinger 1 marzec 2019, 14:52

Wypróbuj ten kod

 String str="0087";
 int pos=str.lastIndexOf("0");
 String resultat=str.substring(0,pos+1);
 resultat+=".";
 resultat+=str.substring(pos+1);
 System.out.println(resultat);
 new BigDecimal(resultat);
0
nissim abehcera 1 marzec 2019, 14:44