Java精确计算-使用选项
我试图对JAVA+SQL中的精确计算选项建立一些简明的概述。到目前为止,我找到了以下选择:Java精确计算-使用选项,java,double,precision,bigdecimal,formulas,Java,Double,Precision,Bigdecimal,Formulas,我试图对JAVA+SQL中的精确计算选项建立一些简明的概述。到目前为止,我找到了以下选择: 使用替身,接受他们的缺点,不去 使用大小数 在复杂的公式中使用它们对我来说是有问题的 使用String.format/Decimal.format将双精度四舍五入 我需要对公式中的每个变量进行四舍五入,还是只对结果进行四舍五入以获得更大的十进制精度 如何调整这一点 在SQL中使用计算字段选项。 缺点是,我需要动态SQL从不同的表中提取数据,并在其他计算字段中提取计算字段,这将变得混乱 还有其他
- 在复杂的公式中使用它们对我来说是有问题的
- 我需要对公式中的每个变量进行四舍五入,还是只对结果进行四舍五入以获得更大的十进制精度
- 如何调整这一点李>
- 缺点是,我需要动态SQL从不同的表中提取数据,并在其他计算字段中提取计算字段,这将变得混乱
非常感谢你对如何处理这些东西的建议 无法在
double
上获得BigDecimal
精度<代码>双精度s具有双精度
如果要保证精确的结果,请使用BigDecimal
您可以使用long
来存储整数部分,使用int
来存储小数部分,来创建您自己的变体-但是为什么要重新发明轮子呢
Any时间使用double
s您可以避免填充器出现双精度问题。如果你在一个地方使用它们,你也可以在任何地方使用它们
即使只使用它们表示数据库中的数据,也会将数据四舍五入到双精度,从而丢失信息。无法在
双精度上获得bigdecimic
精度<代码>双精度
s具有双精度
如果要保证精确的结果,请使用BigDecimal
您可以使用long
来存储整数部分,使用int
来存储小数部分,来创建您自己的变体-但是为什么要重新发明轮子呢
Any时间使用double
s您可以避免填充器出现双精度问题。如果你在一个地方使用它们,你也可以在任何地方使用它们
即使只使用它们表示数据库中的数据,也会将数据舍入到双精度,并且会丢失信息。在float和double中无法避免浮点错误。
这里没有免费奶酪-使用BigDecimal。在float和double中,您无法避免浮点错误。
这里没有免费的奶酪-使用BigDecimal。如果我理解您的问题,您希望使用比本机Java更精确的数据类型,而不丢失简单的数学语法(例如/+*-等等)。由于Java中不能重载运算符,我认为这是不可能的。如果我理解您的问题,您希望使用比本机Java更精确的数据类型,而不丢失简单的数学语法(例如/+*-等等)。由于不能在Java中重载运算符,我认为这是不可能的。来自《有效Java》(第二版): 第48项:如果需要准确答案,请避免浮动和双精度
- Float和double不能提供精确的结果,因此不应在需要精确结果的地方使用。 float和double类型特别不适合于货币计算,因为不可能精确地将0.1(或任何其他10的负幂)表示为float或double
- 解决此问题的正确方法是使用BigDecimal、int或long进行货币计算
- Float和double不能提供精确的结果,因此不应在需要精确结果的地方使用。 float和double类型特别不适合于货币计算,因为不可能精确地将0.1(或任何其他10的负幂)表示为float或double
- 解决此问题的正确方法是使用BigDecimal、int或long进行货币计算
这可能有助于。。。如果设计破坏了您的需求,请返回分析阶段。任何没有固定的、强制性的和详尽的定义何时以及如何应用舍入的金融工具都会被第一个或第二个使用它的人视为计算错误。这可能有助于。。。如果设计破坏了您的需求,请返回分析阶段。任何没有固定的、强制性的和详尽的定义何时以及如何应用舍入的金融工具都会被第一个或第二个使用它的人视为计算错误。@Eugene,好的,谢谢你的评论,但是让我们挑战大小数。要使下面的示例代码正常工作,需要什么我知道这是不正确的语法,但我想有这个