这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:ArithmeticExceptionthrownduringBigDecimal.divide这会导致ArithmeticException:http://ideone.com/RXeZw提供比例和舍入模式会给我错误的结果。这个例子应该输出50.03%。如何正确舍入?为了便于引用,这是代码:BigDecimalpriceDiff=BigDecimal.ONE.subtract(newBigDecimal(9.99).divide(newBigDecimal(19.99))).multiply(newBigD
我正在尝试使用rails,我发现了一些奇怪的东西。为了存储货币值,我使用典型的十进制数据类型,事件记录将其转换为BigDecimal。我认为这是精确的,我想避免float学的奇怪行为。但是当我将99.99存储到数据库时一切正常,但是当事件记录加载记录时它会失去精度并转换为99.9899999999之类的东西。这看起来像是一个float问题。我做了一些测试,发现像这样创建一个BigDecimalb=BigDecimal.new("99.99")会导致一个“干净”的变量,但以这种方式构建它b=BigDecimal.new(99.99)会导致“我想避免的“不干净”版本。我猜想,当从数据库加载
我正在尝试使用rails,我发现了一些奇怪的东西。为了存储货币值,我使用典型的十进制数据类型,事件记录将其转换为BigDecimal。我认为这是精确的,我想避免float学的奇怪行为。但是当我将99.99存储到数据库时一切正常,但是当事件记录加载记录时它会失去精度并转换为99.9899999999之类的东西。这看起来像是一个float问题。我做了一些测试,发现像这样创建一个BigDecimalb=BigDecimal.new("99.99")会导致一个“干净”的变量,但以这种方式构建它b=BigDecimal.new(99.99)会导致“我想避免的“不干净”版本。我猜想,当从数据库加载
我想采取以下方法:publicBigDecimalmean(ListbigDecimals,RoundingModeroundingMode){BigDecimalsum=BigDecimal.ZERO;intcount=0;for(BigDecimalbigDecimal:bigDecimals){if(null!=bigDecimal){sum=sum.add(bigDecimal);count++;}}returnsum.divide(newBigDecimal(count),roundingMode);}并使用Streamsapi更新它。到目前为止,这是我所得到的:public
我想采取以下方法:publicBigDecimalmean(ListbigDecimals,RoundingModeroundingMode){BigDecimalsum=BigDecimal.ZERO;intcount=0;for(BigDecimalbigDecimal:bigDecimals){if(null!=bigDecimal){sum=sum.add(bigDecimal);count++;}}returnsum.divide(newBigDecimal(count),roundingMode);}并使用Streamsapi更新它。到目前为止,这是我所得到的:public
我有一组BigDecimal(在本例中为LinkedList),我想将它们加在一起。是否可以为此使用流?我注意到Stream类有几个方法Stream::mapToIntStream::mapToDoubleStream::mapToLong每个都有一个方便的sum()方法。但是,正如我们所知,float和double算术几乎总是一个坏主意。那么,有没有一种方便的方法来总结BigDecimals?这是我目前的代码。publicstaticvoidmain(String[]args){LinkedListvalues=newLinkedList();values.add(BigDecima