问题标签 [bigdecimal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
18260 浏览

java - Java:将String转换为有效金额的正确方法是什么(BigDecimal)

我必须将传入的字符串字段转换为代表有效金额的 BigDecimal 字段,例如:

使用 Java 将字符串转换为有效金额的正确 API 是什么(例如:apache commons library)?

提前致谢,

0 投票
3 回答
12652 浏览

javascript - JavaScript 有十进制数学库吗?

是否有一个成熟的库可以在 JavaScript 中进行基于十进制的数学运算,可能是任意精度的?

编辑:我想要此信息作为浮点相关问题的参考页面以及在二进制浮点不合适时使用的替代方法:http: //floating-point-gui.de/

0 投票
2 回答
6331 浏览

java - 在从 Java 1.4 迁移到 Java 1.5+ 时避免 BigDecimal 的问题

我最近将 Java 1.4 应用程序迁移到 Java 6 环境。不幸的是,我遇到了BigDecimalOracle 数据库中的存储问题。总而言之,当我尝试在数据库中存储"7.65E+7"BigDecimal 值 ( 76,500,000.00) 时,Oracle 实际上存储了7,650,000.00. 这个缺陷是由于BigDecimal在 Java 1.5 中重写了类(参见此处)。

在我的代码中,BigDecimaldouble使用这种代码创建的:

在超过 99% 的情况下,一切正常。除了在极少数情况下,会发生上述错误。这很烦人。

如果我更改前面的代码以避免使用 String 的构造函数BigDecimal,那么我不会在我的用例中遇到错误:

但是,我如何确定此解决方案是处理使用的正确方法BigDecimal

所以我的问题是知道我必须如何管理我的BigDecimal价值观以避免这个问题:

  • 不要使用new BigDecimal(String)构造函数并直接使用new BigDecimal(double)?
  • 在处理时强制 Oracle 使用toPlainString()而不是方法(在这种情况下如何做到这一点)?toString()BigDecimal
  • 还有其他解决方案吗?

环境信息:

  • Java 1.6.0_14
  • Hibernate 2.1.8(是的,它是一个相当老的版本)
  • Oracle JDBC 9.0.2.0 并且还使用 10.2.0.3.0 进行了测试
  • Oracle 数据库 10.2.0.3.0

编辑:我错误地测试了相同的代码,但使用的是 Oracle JDBC 版本 10.2.0。4 .0 并且没有出现该错误!存储的值确实是76,500,000.00...关于changelog,可能与错误 #4711863 有关。

0 投票
6 回答
31400 浏览

java - Scala 和 Java BigDecimal

我想在我的应用程序中为基于数学的模块从 Java 切换到脚本语言。这是由于 mathy Java 的可读性和功能限制。

例如,在 Java 中我有这个:

如您所见,如果没有 BigDecimal 运算符重载,简单的公式会很快变得复杂。

使用双打,这看起来不错,但我需要精度。

我希望在 Scala 中我能做到这一点:

默认情况下,我会得到类似小数的行为,唉,Scala 默认情况下不使用小数计算。

然后我在 Scala 中执行此操作:

我仍然得到一个不精确的结果。

有什么我在 Scala 中没有做对的事情吗?

也许我应该使用 Groovy 来最大化可读性(它默认使用小数)?

0 投票
2 回答
1024 浏览

java - 使用 BigDecimal 时将 Groovy 作为 Java 的替代品?

我刚刚完成了对 Java、Groovy 和 Scala 的评估。

我考虑的因素是:可读性、精度

我想知道的因素:性能、易于集成

我需要 BigDecimal 级别的精度。

这是我的结果:

爪哇

时髦的

斯卡拉

请注意,在 Java 和 Scala 中,我使用了静态导入。

Java: 优点:它是 Java
缺点:没有运算符重载(很多方法),几乎不可读/可编码

Groovy: 优点:默认 BigDecimal 意味着没有可见的输入,最令人惊讶的是 BigDecimal 支持所有操作(包括除法)
缺点:另一种要学习的语言

Scala: 优点:BigDecimal 有运算符重载
缺点:除法的一些令人惊讶的行为(用 Decimal128 修复),另一种要学习的语言

0 投票
2 回答
3441 浏览

java - 如何在 Lucene 3.0.1 中索引 BigDecimal 值

我有一些 BigDecimal 值,应该为搜索建立索引。Lucene 有 NumericField,但它只有 long、double、float 和 int 的设置器。我可以将它存储为字符串,但我不会从 NumericRangeQuery 中受益。

您如何存储 BigDecimals?有什么最佳实践可以分享吗?

0 投票
9 回答
31491 浏览

java - 在 BigDecimal.divide 期间引发 ArithmeticException

我认为java.math.BigDecimal应该是使用十进制数执行无限精度算术的 The Answer™。

考虑以下代码段:

我希望assert通过,但实际上执行甚至没有到达那里:one.divide(three)导致ArithmeticException被抛出!

事实证明,这种行为已明确记录在API中:

在 的情况下divide,精确商可以有无限长的小数展开;例如,1 除以 3。如果商具有非终止的十进制扩展并且指定操作返回精确结果,ArithmeticException则抛出 an。否则,将返回除法的确切结果,就像其他操作一样。

进一步浏览 API,发现实际上有各种重载divide执行不精确的除法,即:

当然,现在明显的问题是“有什么意义???”。我认为BigDecimal这是我们需要精确算术时的解决方案,例如财务计算。如果我们甚至不能divide完全准确,那么这有多大用处?它实际上是用于通用目的,还是仅在您完全不需要的非常利基的应用程序中有用divide

如果这不是正确答案,我们可以使用什么进行财务计算中的精确划分?(我的意思是,我没有金融专业,但他们仍然使用除法,对吗???)。

0 投票
2 回答
852 浏览

jruby - ruby 环境中的 java.bigDecimal 除法

我正确的 Ruby 中包含 java 类的脚本

在脚本期间,我需要除以 2 java.bigDecimal

因为我在这个 IDE 中没有智能感知,所以我不确定语法是否正确,运行时错误是:

未初始化的常量::HALF_EVEN

  1. 我是否以正确的方式在 ruby​​ 脚本中组合 java 对象?
  2. 我应该如何在 ruby​​ env 中划分两个 java.bigDecimal 对象?
0 投票
2 回答
1622 浏览

ruby - 我如何知道 BigDecimal 是否无法解析?

我正在从 csv 导入数据,我需要将一些值转换为 BigDecimal,如果它们无法解析,则会引发错误。

根据测试,BigDecimal("invalid number") 返回 0 的 BigDecimal。这没问题,但有点混乱,除了有效值为 0...

Float("invalid number") 行为不同并引发异常...

我目前的解决方案是:

我完全错过了什么吗?

0 投票
2 回答
8397 浏览

database - JAXB、BigDecimal 还是双精度数?

我从事不同的 Web 服务,我总是首先使用 WSDL。

JAXB 为以下类型生成:

Java 绑定类型BigDecimal(如 JAXB 规范中所述)。

然后,当我对类型的值double(存储在数据库中并通过 hibernate 映射到 double 类型)进行一些简单的算术运算时,我遇到了麻烦。

什么是正确的方法?

  1. 将我的所有值转换为双精度(JAXB 绑定从BigDecimaldouble
  2. 休眠映射doubleBigdecimal

并以一种对象类型执行我所有的算术运算。