【问题标题】:Output var not calculating输出 var 未计算
【发布时间】:2022-01-10 06:14:16
【问题描述】:

这是一个找零计数器程序。更改计数正确,但余数不正确 (remChange())。在观看了一些视频和 w3schools 教程之后,我仍然对这是为什么一无所知。我在每个函数的底部添加了一个 returnChange,并且能够将最后 2 个函数四舍五入(从浮点数)。我在println中做错了浮点数吗?我的退货标签放错地方了吗?我只是想通过数硬币并把零钱还给我来让它发挥作用。

这是我的代码:让我知道,同时我正在研究。

fun main(args: Array<String>) {
    var  change = 10.88

    getDollars(change)
    getQuarters(change)
    getDimes(change)
    getNickles(change)
}

fun getDollars(change: Double): Double{
    val numofdolla = change/(1.00).toFloat();
    println(numofdolla.toInt());
    val remChange =  change - numofdolla * 1.00;
    println(remChange)
    return change
}

fun getQuarters(change: Double): Double{
    val numofqtr = change/(0.25).toFloat();
    println(numofqtr.toInt());
    val remChange = change - numofqtr * 0.25;
    println(remChange)
    return change
}

fun getDimes(change: Double): Double{
    val numofdime = change/(0.10).toFloat();
    println(numofdime.toInt());
    val remChange =  change - numofdime * 0.10;
    println("%.2f".format(remChange))
    return change
}

fun getNickles(change: Double): Double{
    val numofnick = change/(0.05).toFloat();
    println(numofnick.toInt());
    val remChange = change - numofnick * 0.05;
    println("%.2f".format(remChange))
    return change
}

我不是在寻找任何人来编写我的代码,因为这样的解释会很完美。

【问题讨论】:

  • 当您可以以美分计算并使用精确整数时,为什么要以美元计算(它需要浮点值,而这些浮点值本质上不能准确地表示小数)? (或者,如果您出于某种原因确实需要美元,您可以使用BigDecimals)。
  • 我什至不知道那是一回事!谢谢!我不知道。我在网上自学,所以我不知道我不知道什么,但我会研究精确的整数。
  • 'precise' 是描述,而不是类型名称 :-) 我的意思是您可以使用 Int(或其他整数类型 LongShort、&c),它有没有不准确或四舍五入的问题。浮点会引起很多混乱,很多人在不合适的地方使用它; this question 可能是该主题中最受欢迎的。
  • 那么,如果我理解正确,你是在告诉我 toFloat 导致我的输出没有返回应有的问题吗?
  • 我没有调试你的代码。但是您将货币值存储为浮点数,that'salmostalwaysabadidea...所以我建议将其更改为以美分而非美元为单位。 (如果仍然失败,请发布一个新问题。)

标签: function kotlin return


【解决方案1】:

我不确定您希望在这里发生什么,但您的问题的标题似乎表明您希望在调用这些辅助函数时 change 变量会发生变化。

你不能在 Kotlin 的函数中改变函数参数,但你确实可以从函数返回一个新值。似乎您试图这样做,但这里您的 main 函数没有使用 getXxxx 函数的返回值。所以你的 change 变量永远不会更新。

您可以根据这些函数的结果更新change 变量:

fun main(args: Array<String>) {
    var change = 10.88

    change = getDollars(change)
    change = getQuarters(change)
    change = getDimes(change)
    change = getNickles(change)
}

也就是说,这些函数当前返回原始的 change 变量(未更改),因此如果您希望更改值,您可能希望返回 remChange

【讨论】:

  • 好的,所以这也是我的相同,但它给了我这个错误“期望一个顶级声明。现在,将 remChange 计算放在它自己的函数中会更容易还是可以我有它的方式?
猜你喜欢
  • 1970-01-01
  • 2020-08-16
  • 2019-07-13
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 1970-01-01
相关资源
最近更新 更多