Kotlin\Java - 如何获取更改后的数组元素之和

3

我有一个价格数组,它们是字符串格式的,看起来像这样"$100.00"。 我想计算所有这些价格的总和,但在此之前,我需要将字符串转换为数字,我是这样做的:

val price2 = "$100.00"
val price3 = "INCLUDED"
val price4 = "$200.00"
val prices: Array<String> = arrayOf(price2, price3, price4)

以下是我如何将字符串转换为浮点数:

 for (s: String in prices) {
            //I replace all dollar signs to empty space
            val s1 = s.replace("$", "")
            //I replace Included price to 0
            val s2 = s1.replace("INCLUDED", "0")
            //Change type to float
            val p = s2.toFloat()
            println(p)
        }

如何找到所有已更改元素的总和?我的意思是,我想要100.0 + 0.0 + 200.0的总和。 我尝试过的方法:
//added this into for loop  
val sum = +p
println(sum)

或者

 //I tried to put this into the loop and after it
 val x = prices[0] + prices[1] + prices[2]
 println(x)

感谢您的帮助!我一直在尝试使用Kotlin编写代码,但Java示例也可以。

编辑:我想将p添加到一个新数组中,然后找到第二个数组的总和,但我不知道该如何实现。


你尝试了两个代码版本,得到了什么结果? - Ted Hopp
@TedHopp,使用val sum = +p得到的结果与仅使用println(p)相同 - 只是元素列表,例如100.0、0.0、200.0。 - Viterzgir
你如何初始化 sum - Ted Hopp
1
在循环之前将“sum”初始化为零,并在循环结束后打印“sum”。 - Ted Hopp
1
您可能还想阅读Java实践->货币表示。您应该使用BigDecimal而不是Float - mfulton26
显示剩余6条评论
3个回答

3

试试这个:

var sum = 0
for (s: String in prices) {
        //I replace all dollar signs to empty space
        val s1 = s.replace("$", "")
        //I replace Included price to 0
        val s2 = s1.replace("INCLUDED", "0")
        //Change type to float
        val p = s2.toFloat()
        println(p)
        sum += p // NO var keyword!
}
println(sum)

非常感谢!它帮了我很多 :) 我从评论中理解了你的想法,但当我将 +p 移动到 = 时,它也起作用了。再次感谢 :) - Viterzgir
你可能打算将 sum 声明为 var,而不是 val,否则你以后无法重新分配它。 - Ilya
@Ilya - 是的。谢谢你发现了这个问题。 - Ted Hopp

2
一种更为实际的解决方案:
val prices = listOf(price2, price3, price4)
val pricesParsed = prices.map {it.replace("$", "")}.map {it.toFloatOrNull() ?: 0f}
println(pricesParsed.sum())

谢谢您的回答,但我收到了以下错误:Error: Kotlin: None of the following functions can be called with the arguments supplied: @JvmName public fun Iterable<Byte>.sum(): Int defined in kotlin.collections @JvmName public fun Iterable<Double>.sum(): Double defined in kotlin.collections @JvmName public fun Iterable<Float>.sum(): Float defined in kotlin.collections @JvmName public fun Iterable<Int>.sum(): Int defined in kotlin.collections... - Viterzgir
1
抱歉,我忘记使用浮点零 0f。加上它后,一切都按预期工作了。 - voddan
1
另外请注意,建议使用列表而不是数组。它们具有相同的性能,但功能更加强大。 - voddan

1
可以使用这个:
var p:Float = 0.0f
for(i :String in prices) {
   var s1 =   i.replace("$","")
   var s2 = s1.replace("INCLUDED","0")
   p  = p + s2.toFloat()
}

1
你真的需要注意代码格式化。这样很难阅读。 - Jan B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接