我有两个较大的long
值,例如long a = 106951484895
和long b = 47666297253
。我想一个接一个地分开,同时仍保持精确度和准确性。 a / b
仅提供2
,这既不准确也不准确。 (double)a / b
返回2.243754834308401
这是准确的,但我不知道它是否准确。它是准确的,还是有更好的方法?
答案 0 :(得分:1)
在Java中有一个BigInteger
类,用于在使用整数时需要无限精度的情况。对于十进制数字,请使用BigDecimal
Wolfram Alpha会给你2.243754834308400900535121747859167616725725368773485418854923...
,我们的数字为2.243754834308401
,与
bigDecimal1.divide(bigDecimal2, MathContext.DECIMAL64)
如果你要去
bigDecimal1.divide(bigDecimal2, new MathContext(1000, RoundingMode.HALF_EVEN)))
你会得到
2.24375483430840090053512174785916761672572536877348541885492361677904883097801043287594504
1050407263946829396490609763285697017511527160785819555506643456210143732768535294645618694
7909645722613183738163350810420038396599808994188248448801742297144651257940243013656347535
1346061895880989881427322957327423437070470786123178209350642720039431463073874604572487035
0881416301899886949878414127297558394219666911873273296141755170873372894249298571586701215
5058865276866526572281643300564007415077913939597358974242706109866167162174559269200972437
4468185209762552814414640557312348785977139301334520631262090283427956618755742143233766150
5750523038219597199472866720344664485953248792408356275728443143815091921547456137582778817
3173376404446432448382818379181981559569409501831858179303080342832602945081961262782040747
0742627855109348071601512026092932232568603874560325500767085983329631127368742840999544420
8119473080650114494849915293461361824567061678496514955637978679644265088391509259402889160
为了获得更高的准确性,您可以不断提高MathContext
构造函数中的精度。
此RoundingMode.HALF_EVEN
又名银行家的舍入类似于Java中用于浮点运算和双精度运算的舍入策略。
答案 1 :(得分:1)
如果您check the calculation in Wolfram Alpha,您会看到确切的结果是
2.2437548343084009 00535121747859167616725725368773485418854923 ...你的图
2.243754834308401 已经死了。除非您需要更高的精度,否则double
s的计算就足够了。