我的值大于1.97626258336499E-323
我也不能使用BigInteger,因为它只处理整数值
任何帮助表示赞赏
以下是一些用户给出的解决方案失败的代码也失败了:
BigValue / (Math.Pow((1 + ret), j));
Run Code Online (Sandbox Code Playgroud)
这个BigValue就像15000.25
ret是-0.99197104212554987
j将大约500-600.
我也没有想到如何使用Rational Class
这是Jdk7-b147版本的 BigDecimal.doubleValue()
public double doubleValue(){
if (scale == 0 && intCompact != INFLATED)
return (double)intCompact;
// Somewhat inefficient, but guaranteed to work.
return Double.parseDouble(this.toString());
}
Run Code Online (Sandbox Code Playgroud)
他们承认这种方式效率低下!有没有比使用这种方法更好/更快的方法?
在使用Java BigDecimal时,我有一个问题。当我要将100乘以BigDecimal的对象时,哪种方法会更好。
顺便说一句,它将用于商业计算,所以我考虑的是精度而不是速度。
我正在修补BigDecimalAndroid中的货币格式,并想知道是否可以使用以下方法执行以下操作BigDecimal:
我想要的是:
64.99 --> 65.00 (Rounded Up)
64.99 --> 60.00 (Rounded Down)
65.01 --> 70.00 (Rounded Up)
65.01 --> 65.00 (Rounded Down)
Run Code Online (Sandbox Code Playgroud)
目前,根据我的代码,我只能舍入为零.例如:
我得到了什么:
64.99 --> 70.00 (Rounded Up)
64.99 --> 60.00 (Rounded Down)
65.01 --> 70.00 (Rounded Up)
65.01 --> 60.00 (Rounded Down)
Run Code Online (Sandbox Code Playgroud)
有没有办法BigDecimal实现我的愿望?
我的代码:
private static void printRoundedValues() {
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
BigDecimal valueUp = new BigDecimal(64.50, new MathContext(1,RoundingMode.UP));
BigDecimal valueDown = new BigDecimal(64.50, new MathContext(1,RoundingMode.DOWN));
System.out.println("Value Up: " + currencyFormat.format(valueUp)); …Run Code Online (Sandbox Code Playgroud) 我必须将一个BigDecimal值(例如2.1200,来自数据库)转换为字符串.当我使用toString()or或toPlainString()时BigDecimal,它只打印值2.12而不是尾随零.
如何在BigDecimal不丢失尾随零的情况下将字符串转换为字符串?
为了避免出现像 10.0000 这样的值BigDecimal,我使用了stripTrailingZeros()返回值 10 而不是预期的 10.0000 的方法。现在,10 的小数位数应该为 0,因为对于零或正值,小数位数是小数点右侧的位数。然而,情况并非如此,因为它返回 -1。
Log.d("click", BigDecimal("10").toPlainString()) // return 10
Log.d("click", BigDecimal("10").stripTrailingZeros().toPlainString()) // return 10
Run Code Online (Sandbox Code Playgroud)
上面的代码返回相同的值 10 并且stripTrailingZeros()对其值没有影响。
Log.d("click", BigDecimal("10").scale().toString()) // return 0
Log.d("click", BigDecimal("10").stripTrailingZeros().scale().toString()) // return -1
Run Code Online (Sandbox Code Playgroud)
但这些值的范围不同,因为它返回 0 和 -1,而且
Log.d("click", BigDecimal("100").stripTrailingZeros().scale().toString()) // return -2
Log.d("click", BigDecimal("1000").stripTrailingZeros().scale().toString()) // return -3
Run Code Online (Sandbox Code Playgroud)
有什么办法可以得到我预期的结果吗?谁能解释为什么scale()方法返回负值?
I have POJO like where I have a BigDecimal field:
public class Foo implements Serializable {
private BigDecimal amount;
}
Run Code Online (Sandbox Code Playgroud)
I want to have the BigDecimal value up to 2 decimal place only. Is there any annotation exist using which I can directly change it's value at the field level itself? I cannot change it's type as well.
ObjectMapper尽管它可以通过 getter在应用程序内完成。
java bigdecimal jackson deserialization json-deserialization
嗨,我正在尝试调用需要 unit256 参数的合同的自定义函数。
我使用这个值作为参数从 web3 调用这个函数:10000000000000000000(10 有 18 个零)一旦这个调用被 web3 击中,我就面临以下大数字错误:
错误:溢出(故障=“溢出”,操作=“BigNumber.from”,值=10000000000000000000,代码=NUMERIC_FAULT,版本=bignumber/5.0.0-beta.138)
有人知道原因吗?
这是我正在调用的合同的功能:
function lock(
address tokenAddress,
uint256 amount
)
Run Code Online (Sandbox Code Playgroud)
这是 web3 代码片段:
Contract.methods.lock(0x57AA33D53351eA4BF00C6F10c816B3037E268b7a, 10000000000000000000,
).send({
from: accounts[0],
gasLimit: 500000,
value: 0
});
Run Code Online (Sandbox Code Playgroud)
我用小值尝试了相同的函数,它的工作原理是 1(有 18 个零)
我需要那些了解 Java / Kotlin 的人的帮助。
我想用 BigDecimal 执行一些计算
如果使用 BigDecimal,下面的表达式会是什么样子?
(1 + 0.02) ^ (1 / 251) - 1
我尝试这样做:
val x = (BigDecimal.ONE + BigDecimal(0.02)).pow(1/251) - 1
Run Code Online (Sandbox Code Playgroud)
但是,1 除以 251 并不准确,该表达式始终返回 0
我正在使用 Kotlin/JVM 1.8.0 和 Kotlinx 序列化 1.4.1。
我需要将 ajava.math.BigDecimal和编码java.math.BigInteger为 JSON。
我正在使用BigDecimaland ,BigInteger因为我想要编码的值可能大于 aDouble可以容纳的值,而且我还想避免浮点精度的错误。我不想将数字编码为字符串,因为 JSON 是由其他程序读取的,因此它需要正确。
JSON 规范对数字的长度没有限制,所以应该是可能的。
当我尝试直接使用BigDecimaland时BigInteger,出现错误
import java.math.*
import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class FooNumbers(
val decimal: BigDecimal,
val integer: BigInteger,
)
Run Code Online (Sandbox Code Playgroud)
Serializer has not been found for type 'BigDecimal'. To use context serializer as fallback, explicitly annotate type or property with @Contextual
Serializer has not been found for …Run Code Online (Sandbox Code Playgroud)