Форматирование чисел в Scala?

Мой фаворит от того, когда я работал над приложением связи прежней версии.

// Magic happens here...
16
задан Michael Zajac 16 December 2014 в 17:41
поделиться

4 ответа

scala> "%1.0f" format 1.0
res3: String = 1

Если ваш ввод - Int или Double , вы можете сделать это следующим образом:

def fmt(v: Any): String = v match {
  case d : Double => "%1.0f" format d
  case i : Int => i.toString
  case _ => throw new IllegalArgumentException
}

Использование:

scala> fmt(1.0)
res6: String = 1

scala> fmt(1)
res7: String = 1

scala> fmt(1.0f)
java.lang.IllegalArgumentException
        at .fmt(<console>:7)
        at .<init>(<console>:6)
        at .<clinit>(<console>)
        at RequestResult$.<init>(<console>:4)
        at RequestResult$.<clinit>(<console>)
        at RequestResult$result(<console>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.Dele...

В противном случае вы можете используйте BigDecimals . Они медленные, но у них есть шкала, поэтому «1», «1.0» и «1.00» все разные:

scala> var x = BigDecimal("1.0")
x: BigDecimal = 1.0

scala> x = 1
x: BigDecimal = 1

scala> x = 1.0
x: BigDecimal = 1.0

scala> x = 1.000
x: BigDecimal = 1.0

scala> x = "1.000"
x: BigDecimal = 1.000
30
ответ дан 30 November 2019 в 15:30
поделиться
var x:Double = 1
var y:Double = 1.0

print(x) // => 1.0
print(y) // => 1.0

Если я вас понимаю, вы хотите, чтобы scala печатала x и y по-разному? Проблема в том, что x и y являются переменными типа Double и выглядят одинаково.

Почему вы явно определяете тип варов?

var x = 1 
var y= 1.0

print(x) // => 1
print(y) // => 1.0
8
ответ дан 30 November 2019 в 15:30
поделиться

Используйте вывод типа, а не явную типизацию.

scala> val xi = 1
xi: Int = 1

scala> val xd = 1.0
xd: Double = 1.0

scala> println(xi)
1

scala> println(xd)
1.0
0
ответ дан 30 November 2019 в 15:30
поделиться

Используйте printf :

printf("The value is %.0f", x)

Описание строки формата см. на этой странице документации Java SE 6.

Обратите внимание, что вы, конечно, также можете использовать библиотеку Java из Scala, поэтому другие способы форматирования чисел из Java также можно использовать из Scala. Например, вы можете использовать класс java.text.DecimalFormat :

val df = new java.text.DecimalFormat("#####")
println(df.format(x))
6
ответ дан 30 November 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: