Questions tagged «bigdecimal»

BigDecimal是Java中的数字对象类型,它以任意精度表示十进制数。


3
BigDecimal-使用new或valueOf
我遇到了两种方法来从Double d中获取BigDecimal对象。 1. new BigDecimal(d) 2. BigDecimal.valueOf(d) 哪种方法更好?valueOf会创建一个新对象吗? 通常(不只是BigDecimal),建议使用什么-new或valueOf? 谢谢。
101 java  bigdecimal 

14
用Java表示货币值[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 我了解建议使用BigDecimal来表示Java中的货币值的最佳实践。你用什么?您是否有更喜欢使用的更好的库?


5
最好的(便携式)跨平台任意精度数学库是什么?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 5年前关闭。 改善这个问题 我正在寻找一个使用C或C ++编写的良好的任意精度数学库。您能给我一些建议吗? 主要要求: 它必须处理任意大的整数-我的主要兴趣是整数。如果您不知道任意大这个词的含义,请想象一下类似100000的东西!(阶乘为100000)。 在库初始化或对象创建期间,不必指定精度。精度应仅受系统可用资源的限制。 它应利用平台的全部功能,并应本地处理“小”数字。这意味着在64位平台上,计算(2 ^ 33 + 2 ^ 32)应该使用可用的64位CPU指令。该库不应以与在同一平台上使用(2 ^ 66 + 2 ^ 65)相同的方式来计算该值。 它必须有效地处理加(+),减(-),乘(*),整数除(/),余数(%),幂(**),增量(++),减(--),GCD,阶乘和其他常见的整数算术计算。能够处理不会产生整数结果的函数(例如平方根和对数)是一个加号。处理符号计算的能力甚至更好。 这是我到目前为止发现的内容: Java的BigInteger和BigDecimal类:到目前为止,我一直在使用它们。我已经阅读了源代码,但是我不理解下面的数学原理。它可能基于我从未学过的理论和算法。 内置整数类型或bc,Python,Ruby,Haskell,Lisp,Erlang,OCaml,PHP以及其他一些语言的核心库:我使用了其中一些,但不知道它们使用的是哪个库,或者他们正在使用哪种实现。 我已经知道的: 使用char十进制数字和char*十进制字符串,做用数字计算for-loop。 使用int(或long int或long long)作为基本的“单位”,并使用该类型的数组作为任意长整数,并使用for-loop对元素进行计算。 使用整数类型将十进制数字(或几位数)存储为BCD(二进制编码的十进制)。 布斯的乘法算法。 我不知道的是: 不使用天真的方法,将上述二进制数组以十进制打印。天真的方法的一个示例:(1)从最低到最高的位相加:char*1、2、4、8、16、32 ,……(2)使用上面提到的-string来存储中间十进制结果)。 我的赞赏: 在GMP,MPFR,decNumber(或您认为不错的其他库)上进行了很好的比较。 关于我应该阅读的书籍和文章的好的建议。例如,用数字说明非原始的二进制到十进制转换算法是如何工作的将是很好的。道格拉斯·W·琼斯(Douglas W. Jones)的文章“有限精度的二进制到十进制转换”是一个很好的例子。 任何帮助一般。 如果您认为使用(或或)可以轻松解决此问题,请不要回答此问题。如果您这样认为,则您将不理解所涉及的问题。doublelong doublelong long double
81 c++  c  biginteger  bigdecimal  gmp 

5
将BigDecimal格式化为String,最大2个十进制数字,在小数部分删除0
我有一个BigDecimal数字,我只考虑它的2个小数位,所以我使用以下方法截断了它: bd = bd.setScale(2, BigDecimal.ROUND_DOWN) 现在,我想将其打印为String,但是如果它为0,则删除小数部分,例如: 1.00-> 1 1.50-> 1.5 1.99-> 1.99 我尝试使用Formatter,formatter.format,但我总是得到2个十进制数字。 我怎样才能做到这一点?也许正在处理bd.toPlainString()中的字符串?

1
Java BigDecimal可能的溢出错误
我正在测试一些涉及到的代码的边界条件BigDecimal,并且注意到当aBigDecimal用String初始化时,"1e2147483647"它的行为异常。它似乎在0和之间具有一个值1e-2147483647。当我尝试打电话时intValue(),我得到一个提示NegativeArraySizeException。我应该注意,这2147483647是系统上整数的最大值。我是在做错什么,还是这有问题BigDecimal? BigDecimal test = new BigDecimal("1e2147483647"); test.compareTo(new BigDecimal(0)); //Returns 1 test.compareTo(new BigDecimal("1e-2147483647")); //Returns -1 test.intValue(); //Throws NegativeArraySizeException
78 java  bigdecimal 

9
使用BigDecimal处理货币
我试图使用多头建立自己的货币类,但显然我应该改BigDecimal而使用。有人可以帮我入门吗?将BigDecimals用作美元货币的最佳方法是什么,例如使它至少但不超过2个小数位,等等。用于的APIBigDecimal很大,我不知道使用哪种方法。而且,它BigDecimal具有更好的精度,但是如果它通过double?会不会全部丢失?如果我做新的BigDecimal(24.99),那和使用a有double什么不同?还是应该改用使用a的构造函数String?

1
如何知道BigDecimal是否可以完全转换为float或double?
类BigDecimal有一些有用的方法来保证无损转换: byteValueExact() shortValueExact() intValueExact() longValueExact() 但是,方法floatValueExact()和doubleValueExact()不存在。 我阅读了有关方法floatValue()和的OpenJDK源代码doubleValue()。两者似乎分别回退到Float.parseFloat()和Double.parseDouble(),它们可能返回正无穷大。例如,解析10,000个9s的字符串将返回正无穷大。据我了解,BigDecimal没有内部无限的概念。此外,解析100路787-9的字符串作为double给出1.0E100,这是不无穷大,但失去精度。 什么是一个合理的实现floatValueExact()和doubleValueExact()? 我想到了一个double解决方案相结合BigDecimal.doubleValue(),BigDecial.toString(),Double.parseDouble(String)和Double.toString(double),但它看起来凌乱。我想问一下这里,因为可能(必须!)是一个更简单的解决方案。 需要明确的是,我不需要高性能的解决方案。
10 java  bigdecimal 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.