Skip to content

Commit

Permalink
Change the logic of rounding off to make 0 a possible rating closes #3
Browse files Browse the repository at this point in the history
  • Loading branch information
saran2020 committed May 9, 2019
1 parent 6f752e1 commit 7d06b01
Showing 1 changed file with 23 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,31 @@ open class SlideRatingView @JvmOverloads constructor(

var callback: RatingChangeCallback? = null

// We multiply the decimal value by 100 so that we can convert the
// decimal to ints It gives us more control on rounding off to the
// nearest available.
private fun roundOffRating(value: Float): Float {
val decimal = value - floor(value)
for (mutableEntry in assetMap) {
if (mutableEntry.key >= decimal) {
return floor(value) + mutableEntry.key
val decimalMultiplied = (value - floor(value)) * 100

val keys = assetMap.keys.toList()
var previous = 0
for (current in 1 until assetMap.size) {
val currentMultiple = keys[current] * 100
val previousMultiple = keys[previous] * 100

if (decimalMultiplied > previousMultiple && decimalMultiplied < currentMultiple) {
val differPreviousMultiple = decimalMultiplied - previousMultiple
val differCurrentMultiple = currentMultiple - decimalMultiplied

val minDifference = Math.min(differCurrentMultiple, differPreviousMultiple)
return when {
differPreviousMultiple == differCurrentMultiple -> floor(value) + keys[current]
minDifference == differPreviousMultiple -> floor(value) + keys[previous]
else -> floor(value) + keys[current]
}
}

previous = current
}

return value
Expand Down

0 comments on commit 7d06b01

Please sign in to comment.