2016-08-16 7 views
1

А есть строка: «1234567» Я хочу передать эту строку в BigDecimal с этим форматом: 12345.67 -> Последние два digets должны рассматриваться как десятичные знаки.Java BigDecimal из строки без знаков после запятой, но предполагаю, последние две цифры как десятичное

Есть ли способ для этого, или я должен использовать ресурс потребляя способ, как:

String numberUnformated = 1234567; 
BigDecimal number = new BigDecimal(amount.substring(0,amount.length()-2)+"."+amount.substring(amount.length()-2)) 

Спасибо

ответ

1

Вы могли бы разделить его на 100, как это:

BigDecimal number = new BigDecimal("1234567") 
    .divide(BigDecimal.valueOf(100L)); 
+0

ha, хороший и простой способ, спасибо !!! :) – GobiRan

+0

Два деления на 10 медленнее (больше накладных расходов), чем одно деление на 100, так почему бы не '.divide (BigDecimal.valueOf (100)); вместо этого? –

+1

Это действительно действительно, но 'movePointLeft (2)' является IMO единственным полезным решением. –

4

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

BigDecimal number = new BigDecimal("1234567") .movePointLeft(2): 

Не используйте двойные предложения, потому что вы наверняка потеряете точность, а с BigDecimal вы не будете. Это важно при работе с валютами.

+0

Звучит неплохо и, возможно, меньше ресурсоемких, чем в два раза. Благодаря! – GobiRan

+0

@GobiRan: 'movePointLeft' просто настраивает масштаб, поэтому превосходит все остальное. –

+0

да, мне кажется также. Спасибо всем за ваши хорошие советы! – GobiRan