加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的数字格式?

发布时间:2020-12-16 09:23:43 所属栏目:安全 来源:网络整理
导读:我有一个从文件动态变化的输入读取.数字是Int或Double.为什么Scala在每个双号码后打印.0?是否有一种Scala打印方式与读取相同的方式? 例: var x:Double = 1println (x) // This prints '1.0',I want it to print '1'x = 1.0 // This prints '1.0',which is
我有一个从文件动态变化的输入读取.数字是Int或Double.为什么Scala在每个双号码后打印.0?是否有一种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

我不能使用Int,因为我得到的一些输入是双打.我不能使用String或AnyVal,因为我执行一些数学操作.

谢谢,

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读