I have a Double variable that is 0.0449999 and I would like to round it to 1 decimal place 0.1 .

我正在使用Kotlin,但Java解决方案也很有用.

val number:Double = 0.0449999

我试着用这两个解决方案得到1位小数:

  1. val solution = Math.round(number * 10.0) / 10.0
  2. val solution = String.format("%.1f", number)

问题是,在这两种情况下我都得到0.0,因为它将数字从0.04四舍五入到0.0.它不需要所有的小数和四舍五入.

I would like to obtain 0.1: 0.045 -> 0.05 -> 0.1

推荐答案

最后,我按照Andy Turner的建议,四舍五入到3位小数,然后四舍五入到2位,然后四舍五入到1位:

Answer 1:

val number:Double = 0.0449999
val number3digits:Double = String.format("%.3f", number).toDouble()
val number2digits:Double = String.format("%.2f", number3digits).toDouble()
val solution:Double = String.format("%.1f", number2digits).toDouble()

Answer 2:

val number:Double = 0.0449999
val number3digits:Double = Math.round(number * 1000.0) / 1000.0
val number2digits:Double = Math.round(number3digits * 100.0) / 100.0
val solution:Double = Math.round(number2digits * 10.0) / 10.0

Result:

0.045→ 0.05→ 0.1

注意:我知道这不应该是如何工作的,但有时您需要在某些特殊情况下四舍五入,将所有小数都考虑在内,所以可能有人会觉得这很有用.

Kotlin相关问答推荐

如何在Kotlin的嵌套作用域中解析对此的引用

来自SnapshotFlow的单元测试StateFlow仅发出initialValue

查看流数据和改进的HTTP请求的模型

何时使用figureEach

Kotlin-elvis算子don';不使用map.get()

Kotlin 基于参数类型的返回类型推断

如何在 jOOQ 中两次加入同一张表?

Kotlin 日期格式从一种更改为另一种

你怎么知道什么时候需要 yield()?

Picasso 回调

AIDL 中的 Parcelize 注释:Incompatible types: Object cannot be converted to MyCustomObject

未为任务启用 Gradle 构建缓存

如何在调试中修复 ClassNotFoundException: kotlinx.coroutines.debug.AgentPremain?

无法为 retrofit2.Call 调用无参数构造函数

Jacoco在Gradle 7.0.2和Kotlin 1.5.10上失败

Kotlin解构when/if语句

用mockk验证属性设置程序吗?

为什么在 Kotlin 中return可以返回一个return?

Kotlin:访问 when 语句的参数

如何判断数据是否插入到房间数据库中