我在java hibernate项目下有2个类
带有变量(指数)和(BigDecimal)DataType
的货币类&安培;
带有变量(余额)和(BigDecimal)DataType
的客户类我想将余额比例设为指数
的示例:
1) if exponent = 2, and balance = 230.1340098 then balance must be 230.13
2) if exponent = 1, and balance = 230.1340098 then balance must be 230.1
3) if exponent = 3, and balance = 230.1340098 then balance must be 230.134
4) if exponent = 0, and balance = 230.1340098 then balance must be 230
....
....
....
我该怎么做?
我的意思是我想将客户余额等级作为其货币的指数
注意:我尝试BigDecimal.setScale()但这个方法需要常量整数字段dataType,其中exponent是BigDecimal和变量
答案 0 :(得分:1)
您应该从exponent-BigDecimal中提取整数值,并将其作为参数用于setScale。请注意,您必须设置RoundingMode:
BigDecimal bd = new BigDecimal("230.1340098");
BigDecimal exponent;
exponent = new BigDecimal("0");
System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
exponent = new BigDecimal("1");
System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
exponent = new BigDecimal("2");
System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
exponent = new BigDecimal("3");
System.out.println(bd.setScale(exponent.intValue(), RoundingMode.HALF_UP));
答案 1 :(得分:1)
BigDecimal#setScale(...)
应该有效:
BigDecimal balance = BigDecimal.valueOf( 230.1340098 );
BigDecimal exponent = new BigDecimal( 2 ) ; //randomly chosen
BigDecimal rounded = balance.setScale( exponent.intValue(), RoundingMode.HALF_UP ) ); //you can use another rounding mode
这会产生rounded = 230.13
。
答案 2 :(得分:0)
您可以在intValue()
上致电BigDecimal
以获得所需的结果。
代码段:
private void testBigDecimal(BigDecimal exponent, double balance){
BigDecimal finalOutput = new BigDecimal(balance);
finalOutput = finalOutput.setScale(exponent.intValue(), BigDecimal.ROUND_CEILING);
System.out.println(finalOutput.doubleValue());
}
答案 3 :(得分:0)
我尝试使用setScale(),但此方法需要常量整数
不,它不需要常数整数。它可以接受任何整数。您可以使用BigDecimal.intValue()将指数作为所需的数据类型。
但BigDecimal是指数值的一种非常奇怪的数据类型选择。你不能认真地期望它超出整数的范围。