当前位置: 首页 > 知识库问答 >
问题:

四舍五入双精度到小数点后1位科特林:从0.044999到0.1

郑星辰
2023-03-14

我有一个双变量是0.0449999,我想把它四舍五入到1小数位0.1

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

Val值为0.0449999

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

  1. val solution=Math。圆形(数字*10.0)/10.0
  2. val solution=String。格式(“%.1f”,数字)

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

我想获得0.1:0.045-


共有3个答案

文凯康
2023-03-14

我知道上面的一些解决方案工作完美,但我想添加另一个解决方案,使用ceil和地板的概念,我认为这是优化的所有情况下。

如果需要小数点后两位数字的最大值,请使用下面的代码。

import java.math.BigDecimal 
import java.math.RoundingMode
import java.text.DecimalFormat

这里,1.45678 = 1.46

fun roundOffDecimal(number: Double): Double? {
    val df = DecimalFormat("#.##")
    df.roundingMode = RoundingMode.CEILING
    return df.format(number).toDouble()
}

如果需要小数点后两位数字中的最小值,请使用下面的代码。

这里,1.45678=1.45

fun roundOffDecimal(number: Double): Double? {
    val df = DecimalFormat("#.##")
    df.roundingMode = RoundingMode.FLOOR
    return df.format(number).toDouble()
}

这里列出了所有可用的标志:CEILINGDOWNFLOORHALF_DOWNHALF_EVENHALF_UPUNNECESSARYUP

详细信息见文件

凤伟泽
2023-03-14
匿名用户

BigDecimal舍入有几个RoundingMode的功能,包括向上舍入(远离零)或向正无穷大舍入。如果这是您需要的,您可以通过调用setScale执行舍入,如下所示:

val number = 0.0449999
val rounded = number.toBigDecimal().setScale(1, RoundingMode.UP).toDouble()
println(rounded) // 0.1

但是,请注意,它的工作方式也会将0.00.1之间的任何值舍入到0.1(例如0.00001→ <代码>0.1)。

这个。toBigDecimal()扩展自Kotlin 1.2以来一直可用

唐腾
2023-03-14

最后,我按照安迪·特纳(Andy Turner)的建议,四舍五入到3位小数,然后四舍五入到2位,然后四舍五入到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()

答案二:

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

结果:

0.045→ 0.05→ 0.1

注:我知道这不是它应该如何工作,但有时你需要考虑一些特殊情况下的所有小数,所以可能有人觉得这很有用。

 类似资料:
  • 我如何四舍五入到两个小数位?

  • 获取以下数字集--> 当相加时,这些给出一个整数。

  • 问题内容: 谁能告诉我在Swift中如何将双精度值四舍五入到小数点后位数x? 我有: 以秒为单位的NSTimeInterval(double)。 会给我时间,但是会给我这么长的精确时间,例如1.543240952039 … 打印时如何将其四舍五入为1.543 ? 问题答案: 您可以使用Swift的功能来完成此操作。 要以3位数精度四舍五入,首先将其乘以1000,四舍五入,然后将四舍五入的结果除以1

  • 问题内容: 如果值为,则应将其格式化为。如果是,那么应该是。 问题答案: 这是一个实用程序,可以将双精度舍入(而不是截断)双精度至小数位数。 例如: 原始版本;提防这个 这在小数位数很高(例如)或整数部分很大(例如)的极端情况下会严重崩溃。感谢Sloin指出这一点。 多年来,我一直在使用上面的方法将“不太大”的双精度取整到2或3个小数位(例如,以秒为单位的清理时间用于记录目的:27.9876543

  • 我需要把分钟换算成小时,四舍五入到小数点后两位。我还需要在小数点后显示最多两个数字。所以如果我有650分钟,那么小时应该是10.83。 但在这种情况下,如果我的分钟数是630小时,那就是10.5000000。但我只想要10.50(四舍五入后)。我如何做到这一点?

  • 问题内容: 假设我有,我想将其转换为。如何在Python中完成此操作? 给与不。我是Python或一般编程的新手。 我不想将其打印为字符串,结果将被进一步使用。有关此问题的更多信息,请查看 Tim Wilson的Python编程技巧:贷款和付款计算器 。 问题答案: (或的结果)正确舍入为小数点后两位。数学上,这听起来像您想要的是天花板功能。Python模块中的一个名为: 地板和天花板功能通常分别