Skip to content

Instantly share code, notes, and snippets.

@Koriit
Created January 26, 2020 19:49
Show Gist options
  • Save Koriit/01cb4f78ea4d6599eebd29780a07ec2f to your computer and use it in GitHub Desktop.
Save Koriit/01cb4f78ea4d6599eebd29780a07ec2f to your computer and use it in GitHub Desktop.
Round decimal to n significant places
infix fun Double.roundToSig(places: Int): Double {
val order = log10(this).roundToInt() + 1
val shift = 10.0.pow(places - order)
return round(this * shift) / shift
}
fun testRoundToSig() {
assert(12.9.roundToSig(2).toString() == "13.0")
assert(12.9.roundToSig(3).toString() == "12.9")
assert(123.9.roundToSig(2).toString() == "120.0")
assert(123.9.roundToSig(3).toString() == "124.0")
assert(0.0129.roundToSig(2).toString() == "0.013")
assert(0.0129.roundToSig(3).toString() == "0.0129")
assert(0.01239.roundToSig(2).toString() == "0.012")
assert(0.01239.roundToSig(3).toString() == "0.0124")
assert(19.9.roundToSig(2).toString() == "20.0")
assert(0.0199.roundToSig(2).toString() == "0.02")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment