我有一个双变量是0.0449999
,我想把它四舍五入到1小数位0.1
。
我正在使用Kotlin,但Java解决方案也很有用。
Val值为0.0449999
我试图得到1小数位与这两个解决方案:
val solution=Math。圆形(数字*10.0)/10.0
val solution=String。格式(“%.1f”,数字)
问题是在这两种情况下我都得到了0.0,因为它将数字从0.04
四舍五入到0.0
。它不需要所有的小数和四舍五入。
我想获得0.1:0.045-
我知道上面的一些解决方案工作完美,但我想添加另一个解决方案,使用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()
}
这里列出了所有可用的标志:CEILING
,DOWN
,FLOOR
,HALF_DOWN
,HALF_EVEN
,HALF_UP
,UNNECESSARY
,UP
详细信息见文件
BigDecimal
舍入有几个RoundingMode
的功能,包括向上舍入(远离零)或向正无穷大舍入。如果这是您需要的,您可以通过调用setScale
执行舍入,如下所示:
val number = 0.0449999
val rounded = number.toBigDecimal().setScale(1, RoundingMode.UP).toDouble()
println(rounded) // 0.1
但是,请注意,它的工作方式也会将0.0
和0.1
之间的任何值舍入到0.1
(例如0.00001
→ <代码>0.1)。
这个。toBigDecimal()
扩展自Kotlin 1.2以来一直可用
最后,我按照安迪·特纳(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模块中的一个名为: 地板和天花板功能通常分别