Scala Bigdecimalより多くの小数を表示する方法は?
-
27-10-2019 - |
質問
まず、1 x 3の分割に関して同様のトピックがあることを認識しています。しかし、私のコードはまったく異なり、そこに与えられた情報を自分の状況に適用する方法がわかりません。すべての助けに感謝します。
ScalaでPI計算機を作成し、コードの最後に結果を印刷しました。しかし、私ははるかに多くの小数を持ちたいと思っていますが、それを達成する方法がわかりません。私の現在の出力は次のとおりです。
Expected decimals: 34
3.141592653589793238462643383279500
これがコードです:
package theBrain
object Calculator
{
def main(args: Array[String])
{
var i = 100
var j = 100
var lastValueOnFirstLine = j+i
var array = new Array [BigDecimal] (0)
var counter = i-1
for (d <- j to lastValueOnFirstLine by 1)
{
var almostPi = BigDecimal(0)
var pi = BigDecimal(0)
for (b <- 0 to d by 1)
{
var partialAnswer = (if (b%2 != 0) {-1} else {1} )/((BigDecimal(2)*BigDecimal(b))+BigDecimal(1))
almostPi = partialAnswer + almostPi
}
pi = 4*almostPi
array = array:+pi
}
for (z <- counter to 0 by -1){
var array2 = new Array [BigDecimal] (0)
var length = array.length -2
for (a <- 0 to length by 1){
var result = (array(a)+array(a+1))/2
array2 = array2:+result
}
array = array2
counter -= 1
}
for (element <- array) {
println("Expected decimals: " + element.precision)
println(element)
}
}
}
解決
別のものを提供する必要があります java.math.MathContext
のインスタンスを作成するとき BigDecimal
. 。これは、出力にどれだけの小数が印刷されているかだけでなく、計算の精度に影響することに注意してください。これは、数字の単なるフォーマットとはまったく異なります。
scala> BigDecimal(1) / 3
res0: scala.math.BigDecimal = 0.3333333333333333333333333333333333
scala> res0.precision
res1: Int = 34
scala> BigDecimal(1, new java.math.MathContext(50)) / 3
res2: scala.math.BigDecimal = 0.33333333333333333333333333333333333333333333333333
scala> res2.precision
res3: Int = 50
所属していません StackOverflow