客户余额规模作为其货币的指数

发布于 2024-12-18 11:22:34 字数 641 浏览 0 评论 0原文

我在 java hibernate 项目

货币类下有 2 个类,其中包含变量(指数)和 (BigDecimal) DataType

&

具有变量(余额)和(BigDecimal)数据类型的客户类

我想将余额规模设置为指数

示例:

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,其中指数为 BigDecimal 且可变

i have 2 classes under java hibernate project

currency class with variable (exponent) with (BigDecimal) DataType

&

customer class with variable (balance) with (BigDecimal) DataType

i want to set scale of balance as exponent

example:

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
....
....
....

how can i do this?

what's i mean i want to put the customer balance scale as the exponent of his currency

Note: i try BigDecimal.setScale() but this method required constant integer field dataType where exponent is BigDecimal and variable

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

说好的呢 2024-12-25 11:22:34

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

BigDecimal#setScale(...) should work:

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

This yields rounded = 230.13.

你列表最软的妹 2024-12-25 11:22:34

您应该从 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));

You should extract the integer-value from the exponent-BigDecimal and use that as parameter to setScale. Be aware, that you have to set a 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));
┼── 2024-12-25 11:22:34

您可以在 BigDecimal 上调用 intValue() 来获得所需的结果。

代码片段:

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());
}

You can call intValue() on BigDecimal to get the desired result.

Code snippet:

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());
}
泪冰清 2024-12-25 11:22:34

我尝试 setScale() 但此方法需要常量整数

不,它不需要常量整数。它可以接受任何整数。您可以使用 BigDecimal.intValue() 来获取所需数据类型的指数。

但是 BigDecimal 对于指数值来说是一个非常奇怪的数据类型选择。您不能认真期望它超出整数范围。

I try setScale() but this method required constant integer

No, it doesn't require a constant integer. It can accept any integer. You can use BigDecimal.intValue() to get the exponent as the datatype required.

But BigDecimal is a very strange choice of datatype for the exponent value. You can't seriously be expecting it to get beyond the range of an integer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文