使用BigDecimal Java/Kotlin的表达式

使用BigDecimal Java/Kotlin的表达式,java,kotlin,bigdecimal,Java,Kotlin,Bigdecimal,我需要了解Java/Kotlin的人的帮助 我想用BigDecimal进行一些计算 使用BigDecimal,下面的表达式看起来如何 (1+0.02)^(1/251)-1 我试着这样做: val x = (BigDecimal.ONE + BigDecimal(0.02)).pow(1/251) - 1 但是,将1除以251并不准确,此表达式始终返回0数字文字 在构造BigDecimal时,不要使用数字文本 如果您编写新的BigDecimal(0.02),则编译器首先将此类文本作为浮点或双原语

我需要了解Java/Kotlin的人的帮助

我想用BigDecimal进行一些计算

使用BigDecimal,下面的表达式看起来如何

(1+0.02)^(1/251)-1

我试着这样做:

val x = (BigDecimal.ONE + BigDecimal(0.02)).pow(1/251) - 1
但是,将1除以251并不准确,此表达式始终返回0

数字文字 在构造
BigDecimal
时,不要使用数字文本

如果您编写
新的BigDecimal(0.02)
,则编译器首先将此类文本作为
浮点
原语进行处理。生成的
float
double
然后通过
new
调用
BigDecimal
构造函数

float
double
类型基于技术。性能(快速执行)

因此,使用文字会导致不准确,从而破坏了使用
BigDecimal
的两个目的中的第一个:(a)准确度,(b)处理非常大/非常小的数字

因此,通过传递文本而不是数字来构造一个
BigDecimal
。Java语法中的示例:

新的BigDecimal(“0.02”)
使用方法调用,而不是使用Java数学运算符 您不能将操作符
+-*/
与对象一起使用,至少在Java中不能(我不知道Kotlin)

要添加
BigDecimal
对象,请调用
plus
方法。要进行减法,请调用
subtract
。等等Java语法中的示例:

BigDecimal sum=BigDecimal.ONE.plus(新的BigDecimal(“0.02”);
建设者 使用
new
构造每个
BigDecimal
对象。您的代码
+BigDecimal(…
应该是
+新的BigDecimal(…
)。好吧,至少在Java中是这样……再说一遍,我不认识Kotlin

样品 你的密码,显然在科特林

valx=(BigDecimal.ONE+BigDecimal(0.02)).pow(1/251)-1
…应该更像这样,至少在Java中(与Kotlin相比):

BigDecimal sum=BigDecimal.ONE.plus(新的BigDecimal(“0.02”);
BigDecimal指数=BigDecimal.ONE.除法(新的BigDecimal(“251”);
BigDecimal pow=总和pow(指数);
BigDecimal减法=功率减法(BigDecimal.ONE);
请注意,我建议使用多行代码来分解部分数学工作。我这样做是为了使代码更易于阅读,更易于测试、跟踪和验证

警告:那个代码是即兴的,未经测试。而且,我不是数学天才

警告:我忽略了舍入问题。根据您的工作上下文,您可能需要调用使用
MathContext
执行舍入的方法变体。

1除以251不准确,此表达式始终返回0

这将导致整数除法,要消除整数除法,您可以执行
1.00/251


此外,在
BigDecimal(0.02)之前缺少一个
new
,但即使您这样做了,
BigDecimal
也没有运算符
+
,应该使用
plus
方法。

您使用的是Java还是Kotlin?这会有所不同。您需要选择一个来获得准确的答案。在Kotlin中,该函数是一个运算符函数,它
+
y加上
new
关键字。@slaw,谢谢,我没有注意到Kotlin标记只是为了注意: