2017-03-11 2 views
-1

In meinem Programm verwende ich Bigdecimal, um Zahlen abzuschneiden und sie in einer Variablen zu speichern. Z.B. 123.456789 wird als 123.45 angezeigt.Weiter versuche ich das absolute der Zahlen zu finden.Das Problem ergibt sich hier zB - 123.45 sollte als 123.45 erscheinen, aber es erscheint als 123.4589Egh.Kann jemand bitte helfen, wie kann ich absolute Zahlen finden .Absolute Funktion

var diff1=BigDecimal(diff).setScale(2, BigDecimal.RoundingMode.HALF_UP).toDouble 
var bigdec=abs(diff1) 

Versuchen Eingänge für 10-15 Zahlen in einem Array (in diff Variable)

+0

Versuchen Sie, Code zu veröffentlichen, der das Problem, das Sie beschreiben möchten, zuverlässig reproduziert. – jwvh

Antwort

2

Uhm, ich bin nicht sicher, was das Problem ist, aber für mich funktioniert gut unter:

val diff = -123.456789 
var diff1 = BigDecimal(diff).setScale(2, BigDecimal.RoundingMode.DOWN).toDouble 
var bigdec = Math.abs(diff1) 
println(bigdec) // 123.45 

Beachten Sie, dass Sie, wenn Sie 123.45 statt 123.46 möchten, Ihren Rundungsmodus ändern müssen.

1

in einem Array Taking nichts ändern, auch wenn Sie jetzt eine def und Karte über das Array zu machen braucht, wenn Rundung - wie Sie nicht die BigDecimal Funktion auf einem Array anwenden anrufen:

// generates an Array of 20 elements with random doubles from 0 to 200 
val diff = Array.fill(20)(math.random).map(_ * 200) 
    .map { num => // using this map function to make some negatives 
    if (num < 100) num * -1 
    else num 
    } 

def round(double: Double) = BigDecimal(double) 
    .setScale(2, BigDecimal.RoundingMode.HALF_UP) 
    .toDouble 

var absolute = diff.map(num => Math.abs(round(num))) 

Does Der obige Code spiegelt, was Sie tun? Wenn ja, für var absolute bekomme ich eine Array[Double] mit positiven Zahlen und nur 2 Dezimalstellen.