if-statement - 如何在 kotlin 中检查 Double 值是 Null 还是零
问题描述
如何在 kotlin 中检查 Double 值是 Null 还是零
val ratio:Double? = 0.0
val calRatio = if (ratio == null || ratio == 0.0)
0.12
else
ratio
null , 0.0 , 0.1 中的比率
如果 ratio null 或 0.0 则返回 0.12
并且比率为 0.2 或更大,然后返回相同的比率值
如何检查此算法不使用 if 语句
解决方案
您可以在没有if
使用takeUnless
.
val ratio: Double? = 0.0
val calRatio = ratio.takeUnless { it == 0.0 } ?: 0.12
该takeUnless
调用检查号码是否与谓词匹配it == 0.0
。如果谓词计算结果为true
,null
则返回。只有当谓词计算为时才会false
返回实际数字。
我们可以通过考虑三种可能的情况来了解为什么这样做:
- 当
ratio
是null
时,谓词it == 0.0
计算为false
。调用ratio.takeUnless { it == 0.0 }
返回 的值ratio
,即null
。因为它的左侧操作数是null
,所以?:
运算符返回 的右侧值0.12
。 - 当
ratio
是0.0
时,谓词it == 0.0
计算为true
。调用ratio.takeUnless { it == 0.0 }
忽略 的值,ratio
而是返回null
。因为它的左侧操作数是null
,所以?:
运算符返回 的右侧值0.12
。 - 当
ratio
是任何非空、非零数字时,谓词的it == 0.0
计算结果为false
。调用ratio.takeUnless { it == 0.0 }
返回 的值ratio
,即原始数字。因为它的左侧操作数不为空,所以?:
运算符返回左侧的值。
推荐阅读
- kubernetes - 使用 eksctl 创建 Amazon EKS 集群找不到任何身份验证器
- r - 在多个模型中使用 predict() 在 R 中生成置信区间
- lazy-loading - IntersectionObserver,立即加载图像而不是延迟加载
- ssis - ETL派生列问题
- yosys - 如何获得编号的内部线名 dump_module Yosys
- orocommerce - OroCommerce Storefront json 登录问题
- javascript - Node.js - 在 Express.js 中使用 for 循环来实现多语言/区域支持
- python - Streamlit 中的清晰图像
- python - 在完美任务“批处理”中使用迭代器
- spring-boot - 带下束的弹簧靴