16 scala
我有一个动态改变的文件输入读数.数字是Int或Double.为什么Scala会.0在每个Double数字后打印?有没有办法让Scala以与读取它相同的方式打印它?
例:
var x:Double = 1
println (x) // This prints '1.0', I want it to print '1'
x = 1.0 // This prints '1.0', which is good
Run Code Online (Sandbox Code Playgroud)
我无法使用,Int因为我得到的一些输入是Doubles.我不能使用String或AnyVal因为我执行一些数学运算.
谢谢,
Dan*_*ral 30
scala> "%1.0f" format 1.0
res3: String = 1
Run Code Online (Sandbox Code Playgroud)
如果您的输入是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
}
Run Code Online (Sandbox Code Playgroud)
用法:
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...
Run Code Online (Sandbox Code Playgroud)
否则,您可以使用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
Run Code Online (Sandbox Code Playgroud)
var x:Double = 1
var y:Double = 1.0
print(x) // => 1.0
print(y) // => 1.0
Run Code Online (Sandbox Code Playgroud)
如果我理解你的问题,你想scala以不同的方式打印x和y吗?问题是x和y都是Double类型的变量,看起来是一样的.
为什么要明确定义变量的类型?
var x = 1
var y= 1.0
print(x) // => 1
print(y) // => 1.0
Run Code Online (Sandbox Code Playgroud)
用途printf:
printf("The value is %.0f", x)
Run Code Online (Sandbox Code Playgroud)
有关格式字符串的说明,请参阅Java SE 6 API文档中的此页面.
请注意,您也可以使用Scala中的Java库,因此也可以从Scala中使用其他格式化Java编号的方法.例如,您可以使用类java.text.DecimalFormat:
val df = new java.text.DecimalFormat("#####")
println(df.format(x))
Run Code Online (Sandbox Code Playgroud)
使用Scala 2.10开始,你可以使用的f插:
scala> val x: Double = 1
x: Double = 1.0
scala> println(f"$x%.0f")
1
scala> val i = 1
i: Int = 1
scala> println(f"$i%.0f")
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30835 次 |
| 最近记录: |