使用BigDecimal Java/Kotlin的表达式
我需要了解Java/Kotlin的人的帮助 我想用BigDecimal进行一些计算 使用BigDecimal,下面的表达式看起来如何 (1+0.02)^(1/251)-1 我试着这样做:使用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),则编译器首先将此类文本作为浮点或双原语
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标记只是为了注意: