【Kotlin】数字类型 ( 安全转换函数 | 浮点型转整型 )
2023-06-13 09:18:06 时间
文章目录
一、安全转换函数
在 Kotlin 中 , 将 字符串 String 类型 转为 数字类型 ,
如果 字符串 代表的数字类型 与 要换转的 数字类型 不匹配 ,
就会出异常 ;
如 : 执行如下代码 , 就会报异常 ;
字符串内容是 0.5 ,
显然是一个 Double 类型的数字 , 强行将其转为 Int 类型 ,
就会出现 NumberFormatException 异常 ;
fun main() {
val numbber: Int = "0.5".toInt()
}
执行结果 :
Exception in thread "main" java.lang.NumberFormatException: For input string: "0.5"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at HelloKt.main(Hello.kt:2)
at HelloKt.main(Hello.kt)
Kotlin 提供了 数字类型 的 安全转换函数 String.toIntOrNull() 函数 ,
String.toIntOrNull() 函数原型 : 注意 如果字符串不符合要求 , 就 返回空值 , 因此返回值类型是 可空类型 的 Int 值 , 类型为 Int? ;
/**
* 将字符串解析为[Int]数字并返回结果
* 如果字符串不是数字的有效表示,则为' null '。
*/
@SinceKotlin("1.1")
public fun String.toIntOrNull(): Int? = toIntOrNull(radix = 10)
代码示例 : 字符串内容 0.5 是 Double 类型 的 , 转为 Int 显然会失败 ,
但是使用 该 安全转换函数 , 不会报异常 , 而是返回 空值 ;
fun main() {
val numbber: Int? = "0.5".toIntOrNull()
println(numbber)
}
二、浮点型转整型
toInt 强制转换函数 , 强行将 小数点 后面的小数抹掉 ;
函数原型如下 :
/**
* 将[Double]值转换为[Int]。
*
* 小数部分,如果有的话,四舍五入到零。
* 如果这个' Double '值是' NaN ', [Int]则返回0。MIN_VALUE],如果它小于' Int。MIN_VALUE’,
* [Int。MAX_VALUE],如果它大于' Int.MAX_VALUE '。
*/
public override fun toInt(): Int
roundToInt 四舍五入函数 , 函数原型如下 :
/**
* 将[Double]值舍入为最接近的整数,并将结果转换为[Int]。
* 领带四舍五入到正无穷。
*
* 特殊情况:
* - ' x.roundToInt() == Int. 'MAX_VALUE ' when ' x > Int。MAX_VALUE”
* - ' x.roundToInt() == Int. 'MIN_VALUE '当' x < Int。MIN_VALUE”
*
* 当此值为NaN时,@抛出IllegalArgumentException
*/
@SinceKotlin("1.2")
public actual fun Double.roundToInt(): Int = when {
isNaN() -> throw IllegalArgumentException("Cannot round NaN value.")
this > Int.MAX_VALUE -> Int.MAX_VALUE
this < Int.MIN_VALUE -> Int.MIN_VALUE
else -> Math.round(this).toInt()
}
格式化浮点数 :
/**
* 使用此字符串作为格式字符串,并返回通过替换指定参数获得的字符串,
* 使用默认区域设置。
*/
@kotlin.internal.InlineOnly
public inline fun String.format(vararg args: Any?): String = java.lang.String.format(this, *args)
代码示例 :
import kotlin.math.roundToInt
fun main() {
// 强制转换, 抹掉小数
println(1.7.toInt())
// 四舍五入
println(1.7.roundToInt())
// 保留小数点 2 位
println("%.2f".format(1.77777))
}
执行结果 :
1
2
1.78
相关文章
- Kotlin:我干爹是 Google !
- 有关 Kotlin 具名参数形参传参顺序导致输出结果发生改变问题的一些探索
- 那些年,Kotlin 都截胡了哪些 Java 新特性
- Kotlin 学习笔记(五)—— Flow 数据流学习实践指北(一)
- kotlin能否取代java(kotlin的历史以及现状)
- 【错误记录】Android Studio 4.2.1 编译报错 ( Kotlin 版本推荐设置 1.5.0 )
- 【错误记录】Android Studio 编译报错 ( kotlin library {0} was compiled with a newer kotlin compiler and not b )
- 【Kotlin 协程】协程取消 ③ ( finally 释放协程资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消的协程任务 | 构造超时取消的协程任务 )
- 【Kotlin 协程】Flow 流异常处理 ( 收集元素异常处理 | 使用 try...catch 代码块捕获处理异常 | 发射元素时异常处理 | 使用 Flow#catch 函数捕获处理异常 )
- 【Kotlin】Kotlin 变量与常量 ( 变量声明 | 只读变量 | 类型推断 | 编译时常量 | Kotlin 字节码查看面板 | Kotlin 引用数据类型 )
- 【Kotlin】函数 ① ( 函数头声明 | 函数参数 | 默认参数值 | 具名参数 )
- 【Kotlin】集合操作 ④ ( Set 集合 | 可变 Set 集合 | List 与 Set 之间相互转换 | 数组类型 )
- 【Kotlin】类的继承 ② ( 使用 is 运算符进行类型检测 | 使用 as 运算符进行类型转换 | 智能类型转换 | Any 超类 )
- 【错误记录】Android Studio 编译报错 ( To use data binding annotations in Kotlin, apply the ‘kotlin-kapt‘ plu )
- 如何看待 Kotlin 成为 Android 官方支持的开发语言?一线开发者这样说