0

15.8を使用して、全体を15に、小数部分を8に制限するにはどうすればよいですかBigDecimal

例えば:

String quant= "1000";
String price = "123456789012345.12345678";
final int contant = 100;
BigDecimal bd1;
BigDecimal bd2;
String value = "";
bd1 = new BigDecimal(price).multiply(new BigDecimal(quant));
bd2 = bd1.divide(new BigDecimal(contant));
value = bd2.toPlainString();

として来る出力値1234567890123451.2345678。したがって、全体を 15 まで、小数部分を 8 までに制限できますか。

4

4 に答える 4

0

なぜそんなことをするのかわかりませんが、ここに方法があります-

int contant = 100;
String price = "123456789012345.12345678224423";
String quant = "1000";                
BigDecimal bd1 = new BigDecimal(price).multiply(new BigDecimal(quant));
BigDecimal bd2 = bd1.divide(new BigDecimal(contant));    

final int WHOLE_MAX = 15;
final int SCALE = 8;

String value = bd2.setScale(SCALE, RoundingMode.HALF_UP).toPlainString();

String tempWhole = value.substring(0, value.indexOf('.')); // Digits before the decimal point

String wholePart =   tempWhole.substring(0, Math.min(tempWhole.length(), WHOLE_MAX)); // Gets the first 15 digits
String decimalPart = value.substring(value.indexOf('.'));

value = wholePart.concat(decimalPart);
System.out.println(value);

出力:

123456789012345.23456782

于 2013-09-05T12:36:00.317 に答える
0

「全体」の部分を 15 に制限すると、精度が失われます。なぜそうするのですか? を使用すると、小数部分を制限 (四捨五入) できますBigDecimal.setScalesetScale整数 (使用する小数部分の数) と丸め戦略を取ることができますBigDecimal.ROUND_UP

詳細については、 BigDecimalの JavaDoc を確認してください。

于 2013-09-05T12:22:52.197 に答える