标签: bigdecimal

如何处理大于double的最大值的浮点值

我的值大于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

.net c# math bigdecimal

6
推荐指数
1
解决办法
1705
查看次数

提高BigDecimal的性能以实现双倍转换

这是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 double performance bigdecimal

6
推荐指数
1
解决办法
3050
查看次数

将BigDecimal乘以100哪种方法更好?

在使用Java BigDecimal时,我有一个问题。当我要将100乘以BigDecimal的对象时,哪种方法会更好。

  1. 乘以10两次;
  2. movePointRight(2);
  3. scaleByPowerOfTen(2);
  4. 还有其他方法吗?请告诉我是否有。

顺便说一句,它将用于商业计算,所以我考虑的是精度而不是速度。

java bigdecimal

6
推荐指数
1
解决办法
5349
查看次数

BigDecimal舍入为0或5

我正在修补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)

android rounding bigdecimal

6
推荐指数
1
解决办法
625
查看次数

将BigDecimal转换为String时如何保留尾随零

我必须将一个BigDecimal值(例如2.1200,来自数据库)转换为字符串.当我使用toString()or或toPlainString()BigDecimal,它只打印值2.12而不是尾随零.

如何在BigDecimal不丢失尾随零的情况下将字符串转换为字符串?

java bigdecimal

6
推荐指数
1
解决办法
6239
查看次数

为什么bigDecimal的scale()方法与stripTrailingZeros()方法结合时返回负值?

为了避免出现像 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()方法返回负值?

java android bigdecimal

6
推荐指数
1
解决办法
2130
查看次数

Jackson annotation to convert BigDecimal value and set scale to 2

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

6
推荐指数
1
解决办法
1万
查看次数

无法以大数字作为参数从 web3 调用合约函数

嗨,我正在尝试调用需要 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 个零)

bignum bigdecimal web3-donotuse

6
推荐指数
1
解决办法
5904
查看次数

BigDecimal Java / Kotlin 的表达式

我需要那些了解 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

java bigdecimal kotlin

6
推荐指数
1
解决办法
1万
查看次数

如何在 Kotlinx 序列化中对 BigDecimal 和 BigInteger 进行 JSON 编码而不丢失精度?

我正在使用 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)

serialization json bigdecimal kotlin kotlinx.serialization

6
推荐指数
1
解决办法
1902
查看次数