2016-10-10 3 views
0

IAM с использованием Grails .. у меня есть некоторые проблемы на BigDecimal формате ..умножения между BigDecimal Format ##. 00

, например .. у меня есть два поля на столе "invoice_detail"

price(nullable: false, blank: true, min: new BigDecimal('0.0'), max: new BigDecimal('99999999999999999.99'), scale: 2) 

qty(nullable: false, blank: true, min: new BigDecimal('0.0'), max: new BigDecimal('99999999999999999.99'), scale: 2) 

и хранить, как это ..

id|price | qty | 
1 |50000.00|10.00| 

, когда я называю это так ..

def invoiceD = InvoiceDetail.get(1) 
def total = invoiceD.price * invoiceD.qty 

результат будет 500000.0000

, если я еще раз умножить 10.00 будет 5000000.000000

я хочу получить результат с форматом ###.00 у меня есть идея, чтобы получить результат, как, что с помощью replace, но я думаю, что это не хорошая идея.

+0

использование https://docs.oracle.com/javase/ 7/docs/api/java/text/DecimalFormat.html # format (java.lang.Object,% 20java.lang.StringBuffer,% 20java.text.FieldPosition) или аналогичный вызов. –

ответ

0

вы можете использовать setScale увидеть это BigDecimal setScale and round

def total = invoiceD.price * invoiceD.qty 
total = total.setScale(2, BigDecimal.ROUND_HALF_UP) 

надеюсь, что это поможет вам

-1

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

invoiceD.price * invoiceD.qty.setScale(2, BigDecimal.ROUND_DOWN); 
+0

invoiceD.qty - '10.00' -> шкала 2 –

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