Setup
Write a function that takes a number and returns the number of significant figures in a given number.
Significant Figures are the meaningful digits in a measured or computed value.
All non-zero digits are significant
4.357 has 4 significant figures
152.63 has 5 significant figures
Zeroes at the beginning of a number are not significant
0215 has 3 significant figures
0.6 has 1 significant figure
Trailing zeroes in a number with a decimal point are significant
78.200 has 5 significant figures
20.0 has 3 significant figures
Trailing zeroes in a number without a decimal point are not significant
1200 has 2 significant figures
345000 has 3 significant figures
All zeroes between significant figures are significant
90.09 has 4 significant figures
5050 has 3 significant figures
Constraints:
The type of the given number will be string.
You must return the number of significant figures as type int.
No blank strings will be given.
Tests
1
003
3000
404
050030210
0.1
0.0
Good luck and have fun!
This challenge comes from ljgecko1230 on CodeWars. Thank you to CodeWars, who has licensed redistribution of this challenge under the 2-Clause BSD License!
Want to propose a challenge idea for a future post? Email yo+challenge@dev.to with your suggestions!
Top comments (13)
Shouldn't it be the other way around?
I just checked on Wikipedia and it is right the way that it is stated in the task. This is because if you add zeros after the decimal point, you imply that your number was "measured" with a higher precision.
Example: a normal ruler vs. a precision measuring devices
If you use the normal ruler you can only be certain your measured distance is 1.5cm
With a precision ruler you can be certain, that your measured distance is something like 1.500cm
Oh, so it's a measurement thing.
Interestingly enough, technically, according to Wikipedia we have no way of knowing whether any zero to the right of the last non-zero digit is significant or not, regardless of the presence of decimals. So the exercise is still not quite right.
I feel like the exercise is fine. It defines a definite rule for deciding on which trailing zeros are significant and which aren't.
Yes, but I suppose it's changed to avoid the obvious
string -> number -> string
conversion that would take care of non-significant zeros.Well actually, no. See my response :D
Still doesn't explain why "Trailing zeroes in a number without a decimal point" are not significant, considering how each such zero increases the number by an order of magnitude and how appending
.0
suddenly makes these zeroes significant.Check the Wikipedia article it explains that aswell. Short answer is, that trailing zeros are somewhat ambiguous and that you have to specify it by some rule, which is done by the task description.
Nim submission.
in python
note: added the 11 and 1.1 test cases because the subtracting-from-both-ends solution can have edge cases around there
I think this should do the trick, I'll test it later.
JavaScript
js solution :)
Good point! I didn’t account for trailing 0’s. I’ll update it later.