Forum: Ruby i need to represent data as percentages

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Trick N. (Guest)
on 2008-10-23 04:55
basically i go through a document count up the total number of times the
status codes appeared.  eg 200 = 96 201 =8 300 = 12 etc etc.  I have
counted up the total number of codes in the whole file and now must
divide by each source codes value or individual count so it would be
something like 108.to_f / 92.to_f but i get these numbers such as
0.86899 yadayadayada.  How do i convert that float number now to a
representable percent such as 87%?
Tim H. (Guest)
on 2008-10-23 05:06
(Received via mailing list)
Trick Nick wrote:
> basically i go through a document count up the total number of times the
> status codes appeared.  eg 200 = 96 201 =8 300 = 12 etc etc.  I have
> counted up the total number of codes in the whole file and now must
> divide by each source codes value or individual count so it would be
> something like 108.to_f / 92.to_f but i get these numbers such as
> 0.86899 yadayadayada.  How do i convert that float number now to a
> representable percent such as 87%?



irb(main):008:0> x = 0.86899
=> 0.86899
irb(main):009:0> "%2d%%" % (x * 100.0)
=> "86%"
irb(main):010:0>



~$ ri String#%
--------------------------------------------------------------- String#%
      str % arg   => new_str
------------------------------------------------------------------------
      Format---Uses str as a format specification, and returns the
      result of applying it to arg. If the format specification contains
      more than one substitution, then arg must be an Array containing
      the values to be substituted. See Kernel::sprintf for details of
      the format string.

         "%05d" % 123                       #=> "00123"
         "%-5s: %08x" % [ "ID", self.id ]   #=> "ID   : 200e14d6"

~$
Brian C. (Guest)
on 2008-10-23 12:52
Tim H. wrote:
> irb(main):008:0> x = 0.86899
> => 0.86899
> irb(main):009:0> "%2d%%" % (x * 100.0)
> => "86%"
> irb(main):010:0>

Or better, if you want round-to-nearest:

irb(main):009:0> "%2.0f%%" % (x * 100)
=> "87%"
irb(main):010:0> "%2.1f%%" % (x * 100)
=> "86.9%"
irb(main):011:0> "%2.2f%%" % (x * 100)
=> "86.90%"
irb(main):012:0> "%2.3f%%" % (x * 100)
=> "86.899%"
Robert K. (Guest)
on 2008-10-23 16:04
(Received via mailing list)
2008/10/23 Brian C. <removed_email_address@domain.invalid>:
> => "87%"
> irb(main):010:0> "%2.1f%%" % (x * 100)
> => "86.9%"
> irb(main):011:0> "%2.2f%%" % (x * 100)
> => "86.90%"
> irb(main):012:0> "%2.3f%%" % (x * 100)
> => "86.899%"

In that case you can do  "%.1f%%" % (x * 100), i.e. you do not need
the number before the dot.  This number is for fixing the length of
the whole expression:

irb(main):001:0> "%.2f" % 1.2345
=> "1.23"
irb(main):002:0> "%10.2f" % 1.2345
=> "      1.23"
irb(main):003:0> "%1.2f" % 1.2345
=> "1.23"
irb(main):004:0> "%0.2f" % 1.2345
=> "1.23"
irb(main):005:0> "%5.2f" % 1.2345
=> " 1.23"

Kind regards

robert
This topic is locked and can not be replied to.