kotlin round()函数的类似物,用于将0.5变为0

wbgh16ku  于 2023-04-07  发布在  Kotlin
关注(0)|答案(2)|浏览(199)

嗨,我需要在模拟的round()功能,把0.5到0。例如0.4 -〉0 ;9.5 -〉9 ; 10.6 -〉11
我试着做

var height = Math.round(width / firstNum * thecondNum).toInt()
    var e = height.toDouble()
    var roundedHalfDown = e.toBigDecimal().setScale(0, ROUND_HALF_DOWN).toDouble().toInt()

  
    return ("$width x $roundedHalfDown").replace(" ","")
}

我也试过这个

var height = Math.round(width / firstNum * thecondNum).toInt()
    var e = height.toDouble()
    var r = Math.floor(e)
    if ((height % 10) == 5){
        
      r -= 1
        return ("$width x $r").replace(" ","")
    }
    
    else return ("$width x $height").replace(" ","")
}

测试显示4:3,width = 1457预期:〈1457 x109 [2]〉,但实际上:〈1457 x109 [3]〉

44u64gxh

44u64gxh1#

您通过setScale的第一个建议对于给定的输入可以按照预期工作,不需要在BigDecimal的输出上使用中间toDouble()

fun Double.roundDown() = toBigDecimal().setScale(0, RoundingMode.HALF_DOWN).toInt()
fun testOutput(input: Double) = 
  println("%.4f rounded to %d".format(input, input.roundDown()))

testOutput(0.4)    // 0.4000 rounded to 0
testOutput(9.4999) // 9.4999 rounded to 9
testOutput(9.5)    // 9.5000 rounded to 9
testOutput(9.5001) // 9.5001 rounded to 10
testOutput(10.6)   // 10.600 rounded to 11
xtupzzrd

xtupzzrd2#

你可以从你的值中减去最小的可能区间(取决于数据类型),这样0.5 -〉0.49999999然后向下舍入。

相关问题