Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Kotlin中,如何制作计算税收或增值税的函数?_Kotlin_Intellij Idea - Fatal编程技术网

在Kotlin中,如何制作计算税收或增值税的函数?

在Kotlin中,如何制作计算税收或增值税的函数?,kotlin,intellij-idea,Kotlin,Intellij Idea,在Kotlin中,我如何制作一个函数来计算我之前输入的价格的税费或增值税? 例如:我输入一个数字(467),从这个数字中我想得到与税的总和。在希腊,我们有24%的税收或增值税 fun main(args: Array<String>) { var input = readLine() println(tax(0.24)) } fun tax(x: Double): Double { return 0.24 * x } fun main(args:Array)

在Kotlin中,我如何制作一个函数来计算我之前输入的价格的税费或增值税? 例如:我输入一个数字(467),从这个数字中我想得到与税的总和。在希腊,我们有24%的税收或增值税

fun main(args: Array<String>) {
    var input = readLine()
    println(tax(0.24))
}
fun tax(x: Double): Double {
    return 0.24 * x
}
fun main(args:Array){
var input=readLine()
印花税(税率(0.24))
}
娱乐税(双倍):双倍{
返回0.24*x
}

最后,我希望在开始时输入价格,例如467*24%您可以这样做:

fun readLn() = readLine()!!
fun readNumAndCalcGreekTax() {
    println("Enter a number")
    val userInput = readLn().toInt()
    val userInputPlusTax = userInput * 1.24
    println("For $userInput plus %24 tax: Total:  $userInputPlusTax")
}
readNumAndCalcGreekTax()
val TAX_RATE = BigDecimal("0.24")

fun main(args: Array<String>) {
    println("Enter the price:")
    val input = readLine()
    
    if (input != null) {
        val price = input.toBigDecimal()
        val taxPercentage = TAX_RATE.scaleByPowerOfTen(2)
        println("€$price * tax @ $taxPercentage% = €${tax(price)}")
    }
}

fun tax(x: BigDecimal) = TAX_RATE * x
输出将是

Enter a number
460
For 460 plus %24 tax: Total:  570.4

我可能误解了这个问题,因为它看起来很基本

问题中的代码将用户的一个数字读入变量
input
,但对它没有任何作用。因此我怀疑您要做的是
println(tax(input))

但是,如果您尝试这样做,您将得到一个编译错误:

Type mismatch.
Required: Double
Found: String?
input
是一个字符串(如果文件结尾,则为null),但是您的
tax()
函数需要一个
双精度的
数字。因此,您需要做的是将字符串转换为数字。最简单的方法是调用字符串的方法

如果这样做,您将获得另一个编译器错误,因为您没有处理
输入
可能为null的可能性(并且您不能对null调用
toDouble()
),因此您必须首先检查该错误,例如:

if (input != null)
    println(tax(input.toDouble())
我想这就是你想要的

但还有许多值得改进的地方,例如:

  • 例如,Double
,因为它不能准确地存储小数点。(它在显示时四舍五入到最接近的小数点,这通常会掩盖问题,但它会以许多微妙的方式咬你。)相反,你可以使用没有问题的类型
  • 税率应该是恒定的,所以你不必在其他地方重复
  • 你可以给用户一个提示,然后在输出中使用一个额外的信息(正如@Sid所建议的那样)。在这种情况下,最好存储价格以避免转换两次
  • 由于在创建
    input
    之后没有修改它,因此将其设置为不可变的
    val
    比设置为
    var
    更安全
  • 您可以使用
    tax()
    函数中较短的一个
  • 有了所有这些变化,它可能看起来像这样:

    fun readLn() = readLine()!!
    fun readNumAndCalcGreekTax() {
        println("Enter a number")
        val userInput = readLn().toInt()
        val userInputPlusTax = userInput * 1.24
        println("For $userInput plus %24 tax: Total:  $userInputPlusTax")
    }
    readNumAndCalcGreekTax()
    
    val TAX_RATE = BigDecimal("0.24")
    
    fun main(args: Array<String>) {
        println("Enter the price:")
        val input = readLine()
        
        if (input != null) {
            val price = input.toBigDecimal()
            val taxPercentage = TAX_RATE.scaleByPowerOfTen(2)
            println("€$price * tax @ $taxPercentage% = €${tax(price)}")
        }
    }
    
    fun tax(x: BigDecimal) = TAX_RATE * x
    
    val TAX\u RATE=BigDecimal(“0.24”)
    趣味主线(args:Array){
    println(“输入价格:”)
    val input=readLine()
    如果(输入!=null){
    val price=input.toBigDecimal()
    val taxPercentage=税率。比例功率(2)
    println(€$price*tax@$taxPercentage%=€${tax(price)})
    }
    }
    乐趣税(x:BigDecimal)=税率*x
    
    我假设价格是欧元;在更复杂的程序中,货币可能会随价格一起传递/输入。而在实践中,税收计算通常要复杂得多(例如,处理不同税率、零税率或免税的项目,并且根据买家的身份,可能不需要纳税)


    (顺便说一句,“tax”不是缩写,所以通常不大写。)

    你可以在Kotlin中尝试字符串格式,你能给我一个上面提供的代码的例子吗?这非常“干净”!非常感谢@Lolos没问题,请记住验证输入
    toInt()
    例如可能会抛出
    NumberFormatException
    实际上您上面写的比我正在学习的课程要好!非常感谢您提供的信息和您的知识,我非常感谢。