How to truncate float number after dot?

Discussion in 'Ruby' started by Marcin Tyman, Jul 26, 2007.

  1. Marcin Tyman

    Marcin Tyman Guest

    Hi,

    How to truncate float number after dot? I suppose it would be easy.

    Thank in advance
    MT
     
    Marcin Tyman, Jul 26, 2007
    #1
    1. Advertisements

  2. Marcin Tyman

    hemant Guest

    19.84.round #=> big brother is watching you
     
    hemant, Jul 26, 2007
    #2
    1. Advertisements

  3. Marcin Tyman

    Pat Maddox Guest


    irb(main):001:0> 12.68.floor
    => 12
    irb(main):002:0> 12.68.ceil
    => 13

    Pat
     
    Pat Maddox, Jul 26, 2007
    #3
  4. Marcin Tyman

    Pat Maddox Guest

    Gah, I forgot the all important round!

    irb(main):003:0> 12.68.round
    => 13
    irb(main):004:0> 12.38.round
    => 12

    Pat
     
    Pat Maddox, Jul 26, 2007
    #4
  5. 12.38.to_i

    robert
     
    Robert Klemme, Jul 26, 2007
    #5
  6. Marcin Tyman

    Marcin Tyman Guest

    I didn't mean to truncate all. But i.e. to round to several places after
    dot.
     
    Marcin Tyman, Jul 26, 2007
    #6
  7. Usually it's better to calculate with full precision and round when
    printing, e.g. using printf of

    irb(main):022:0> "%4.1f" % 1.0
    => " 1.0"
    irb(main):023:0> "%4.1f" % 1.04
    => " 1.0"
    irb(main):024:0> "%4.1f" % 1.05
    => " 1.1"

    Kind regards

    robert
     
    Robert Klemme, Jul 26, 2007
    #7
  8. -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Rounding to a certain number of digits works as follows:

    Let n be the number of digits following the decimal point you want to
    obtain. Then

    1. Multiply the number by 10 to the power n (i.e. by 10.0 ** n)
    2. Round the number (i.e. use Float#round)
    3. Divide the result by 10 to the power n

    The latter can either be done by division by 10.0 ** n or by
    multiplication by 0.1 ** n.

    But as Robert Klemme already noted: It rarely makes sense to actually
    round numbers. It usually makes more sense to compute with the available
    precision and limit the output to the wanted number of digits.

    Anyway, sometimes it makes sense. For example if you are required by law
    to round intermediate calculation results to a certain amount of digits.
    But in such cases one should not at all use floating point numbers for
    the computations. One would rather use integers, fixed-point arithmetics
    (as e.g. supported by COBOL) or the Decimal data type from Microsoft's
    Common Type System (e.g. supported by C#).

    Josef 'Jupp' Schugt
    - --
    Blog available at http://www.mynetcologne.de/~nc-schugtjo/blog/
    PGP key with id 6CC6574F available at http://wwwkeys.de.pgp.net/
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.7 (GNU/Linux)
    Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org

    iD8DBQFGqK1/rhv7B2zGV08RArEPAJ0Z6ihtrVLvBn0ODryW8Ptu3uqplACfTuT1
    muYIWqBXnWKO4ZwEKYMiVik=
    =5H5E
    -----END PGP SIGNATURE-----
     
    Josef 'Jupp' Schugt, Jul 26, 2007
    #8
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.