Sorry, but I don’t have much time that I can spend to come up with a
better answer right now.
But, I thought I would throw this idea your way.
Check it carefully (it may have bugs) and maybe you can make
improvements.
require ‘bigdecimal’
arr = [23,26759,10.546,3332332,0.766,0.00000766]
arr.each do |x|
m = 2 - Math.log10(x).floor
p
BigDecimal.new(((x10**m).round10**(-1m)).to_s).to_s(‘F’).gsub(/.0$/,“”)
end
I don’t think the 0.0000008 instead of 0.000000766 case will be a
problem.
Okey-dokey! “soft” requirement for the win!
My next quest is to work out what’s going on in your code snippet.
I can see that the sub at the end removes trailing zeros, right?
Yes, in English it says:
If there is a series of 0’s (0*) at the end of the string (\z)
possibly preceeded by a decimal point (.?), replace all that with
nothing (i.e., delete it).
And the first part looks like some oldschool c-style string
substitution, time to pull out the pickaxe
thanks again!
max
String#% will direct you to Kernel#sprintf, but you’re already on the
right track.