前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin】数字类型 ( 安全转换函数 | 浮点型转整型 )

【Kotlin】数字类型 ( 安全转换函数 | 浮点型转整型 )

作者头像
韩曙亮
发布2023-03-30 18:41:09
3.1K0
发布2023-03-30 18:41:09
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、安全转换函数


在 Kotlin 中 , 将 字符串 String 类型 转为 数字类型 ,

如果 字符串 代表的数字类型 与 要换转的 数字类型 不匹配 ,

就会出异常 ;

如 : 执行如下代码 , 就会报异常 ;

字符串内容是 0.5 ,

显然是一个 Double 类型的数字 , 强行将其转为 Int 类型 ,

就会出现 NumberFormatException 异常 ;

代码语言:javascript
复制
fun main() {
    val numbber: Int = "0.5".toInt()
}

执行结果 :

代码语言:javascript
复制
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? ;

代码语言:javascript
复制
/**
 * 将字符串解析为[Int]数字并返回结果
 * 如果字符串不是数字的有效表示,则为' null '。
 */
@SinceKotlin("1.1")
public fun String.toIntOrNull(): Int? = toIntOrNull(radix = 10)

代码示例 : 字符串内容 0.5 是 Double 类型 的 , 转为 Int 显然会失败 ,

但是使用 该 安全转换函数 , 不会报异常 , 而是返回 空值 ;

代码语言:javascript
复制
fun main() {
    val numbber: Int? = "0.5".toIntOrNull()
    println(numbber)
}

二、浮点型转整型


toInt 强制转换函数 , 强行将 小数点 后面的小数抹掉 ;

函数原型如下 :

代码语言:javascript
复制
/**
 * 将[Double]值转换为[Int]。
 *
 * 小数部分,如果有的话,四舍五入到零。
 * 如果这个' Double '值是' NaN ', [Int]则返回0。MIN_VALUE],如果它小于' Int。MIN_VALUE’,
 * [Int。MAX_VALUE],如果它大于' Int.MAX_VALUE '。
 */
public override fun toInt(): Int

roundToInt 四舍五入函数 , 函数原型如下 :

代码语言:javascript
复制
/**
 * 将[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()
}

格式化浮点数 :

代码语言:javascript
复制
/**
 * 使用此字符串作为格式字符串,并返回通过替换指定参数获得的字符串,
 * 使用默认区域设置。
 */
@kotlin.internal.InlineOnly
public inline fun String.format(vararg args: Any?): String = java.lang.String.format(this, *args)

代码示例 :

代码语言:javascript
复制
import kotlin.math.roundToInt

fun main() {
    // 强制转换, 抹掉小数
    println(1.7.toInt())

    // 四舍五入
    println(1.7.roundToInt())

    // 保留小数点 2 位
    println("%.2f".format(1.77777))
}

执行结果 :

代码语言:javascript
复制
1
2
1.78
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、安全转换函数
  • 二、浮点型转整型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档