我如何在 Kotlin 中 link Methods/Functions?

How do I link Methods/Functions in Kotlin?

我试过用几种不同的方式让它工作,但我似乎无法理解它。在第 1 版中,它告诉我未使用 changeDue,而在第 2 版中,它只是空白运行。如果这有任何改变,我正在使用代码游乐场。感谢任何帮助。

版本 1:

fun main(args: Array<String>) {
var changeDue = 1.23;
fun truncate(changeDue: Double): Double{
var numberOfQuarters = changeDue /.25;

println(numberOfQuarters);

var remainingChange = changeDue - numberOfQuarters * .25;
println(remainingChange);
return changeDue
}
}

版本 2:尝试使用 class

fun main(args: Array<String>) {
    class quarters{
    var changeDue = 1.23;
    fun truncate(changeDue: Double): Double{
    var numberOfQuarters = changeDue /.25;

    println(numberOfQuarters);

    var remainingChange = changeDue - numberOfQuarters * .25;
    println(remainingChange);
    return changeDue
    }
}
}

你从来没有打电话给相关的 class/function

试试这个:

fun main(args: Array<String>) {
    fun truncate(changeDue: Double): Double{
        var numberOfQuarters = changeDue /.25;

        println(numberOfQuarters);

        var remainingChange = changeDue - numberOfQuarters.toInt() * .25;
        println(remainingChange);
        return changeDue
    }
    println(truncate(1.23))
}

ref

对您的代码的几点说明:

  • 尽可能使用 val 而不是 var。拥有在第一次设置后不改变其值的变量将帮助您避免代码中的常见错误/错误。
  • 在 Kotlin 中,不需要在每个语句的末尾使用 ;

现在回到你的问题。在您的代码中,您没有在任何地方调用 truncate() 。简单地声明函数不会调用它。以下按预期工作:

import kotlin.math.floor

fun main(args: Array<String>) {
    fun truncate(changeDue: Double): Double {
        val numberOfQuarters: Double = floor(changeDue / 0.25)
        println(numberOfQuarters)

        val remainingChange = changeDue - numberOfQuarters * 0.25
        println(remainingChange)

        return changeDue
    }

    println(truncate(1.23))
}

然而,输出是:

4.0
0.22999999999999998
1.23

如您所见,0.22999999999999998 并不是您期望的确切结果。为了避免这种情况,您需要使用 BigDecimal 而不是 Double,如下所示:

import java.math.BigDecimal
import kotlin.math.floor

fun main(args: Array<String>) {
    fun truncate(changeDue: BigDecimal): BigDecimal {
        val numberOfQuarters: BigDecimal = floor(changeDue.toDouble() / 0.25).toBigDecimal()
        println(numberOfQuarters)

        val remainingChange = changeDue - numberOfQuarters * 0.25.toBigDecimal()
        println(remainingChange)

        return changeDue
    }

    println(truncate(1.23.toBigDecimal()))
}

哪个 return:

4.0
0.230
1.23

另一种可能性是使用 https://www.baeldung.com/java-money-and-currency 中讨论的货币图书馆。