我有一个数值范围内的值(例如0..100
),我想将它翻译成另一个范围(例如到0..9
)。因此,结果将是:Kotlin中有没有什么方法可以将一个值从一个范围转换为另一个范围?
50 -> 4
或100 -> 9
,...
是否有任何科特林方法让我在这方面?
我有一个数值范围内的值(例如0..100
),我想将它翻译成另一个范围(例如到0..9
)。因此,结果将是:Kotlin中有没有什么方法可以将一个值从一个范围转换为另一个范围?
50 -> 4
或100 -> 9
,...
是否有任何科特林方法让我在这方面?
计算原始范围内的数字的比例。 乘以第二个范围。
fun convert(number: Int, original: IntRange, target: IntRange): Int {
val ratio = number.toFloat()/(original.endInclusive - original.start)
return (ratio * (target.endInclusive - target.start)).toInt()
}
作为扩展功能
fun IntRange.convert(number: Int, target: IntRange): Int {
val ratio = number.toFloat()/(endInclusive - start)
return (ratio * (target.endInclusive - target.start)).toInt()
}
val result = (0..100).convert(50, 0..9)
感谢您的回答,这是正确的,只是想知道在Kotlin API中是否有任何功能,或者我必须这样做。 –
不是我所知道的。你可以把它写成扩展功能 –
我也这么做了,谢谢 –
val r2 = IntRange(0, 100).filter { it %10 ==0 }.map { it /10 }
对不起我的坏问题,我只是改善它。 –
我想这应该工作,
val original = 0..100
val new = original.step((original.endInclusive - original.start)/9).map{it /10}.forEach{ println(it)}
输出,
0
1
2
3
4
5
6
7
8
9
我没有得到你的想法,什么51将被转换为? –
@KrisRoofe 51将是4,直到我们到55和55到60之间,结果将是5.我想要将我的范围转移到一个新的范围。 –
新的范围还有100个元素? –