truncating a floating type variable

Discussion in 'C Programming' started by VISHNU VARDHAN REDDY UNDYALA, Oct 23, 2005.

  1. Hello,
    Can someone over here help me in truncating a float variable.
    I mean if PI=3.14159 ...How can I get to read the first two or first
    three decimal values with out rounding them. Any suggestions are
    appreciated. I am BEGINNER TO C PROGRAAMING. Thanks
     
    VISHNU VARDHAN REDDY UNDYALA, Oct 23, 2005
    #1
    1. Advertising

  2. On 23 Oct 2005 07:59:37 -0700, "VISHNU VARDHAN REDDY UNDYALA"
    <> wrote:

    >Hello,
    >Can someone over here help me in truncating a float variable.
    >I mean if PI=3.14159 ...How can I get to read the first two or first
    >three decimal values with out rounding them. Any suggestions are
    >appreciated. I am BEGINNER TO C PROGRAAMING. Thanks


    Your question is very ambiguous. First you talk about truncating a
    floating point variable. Then you talk about reading data. Describe
    what you really want to do.

    When composing your question, consider the following:

    There are many systems for representing floating point variables.
    I do not know of any that use decimal. In all of the binary systems I
    am familiar with, most decimal values cannot be represented exactly.
    Thus, the value 3.14 will be stored in a float (or double) as some
    value that is close to 3.14 but that has an "error" in the outer
    decimal positions, something like 3.14000004 or 3.13999998.

    What is your starting point? Is the value of pi already in a
    float or double? Is it in a file to be read? If so, it what format
    (character, binary, etc)?

    What do you want the result to be? Another floating point value?
    How many significant digits? A character string? How long?


    <<Remove the del for email>>
     
    Barry Schwarz, Oct 23, 2005
    #2
    1. Advertising

  3. VISHNU VARDHAN REDDY UNDYALA

    Michael Mair Guest

    Barry Schwarz wrote:
    > On 23 Oct 2005 07:59:37 -0700, "VISHNU VARDHAN REDDY UNDYALA"
    > <> wrote:
    >
    >
    >>Hello,
    >>Can someone over here help me in truncating a float variable.
    >>I mean if PI=3.14159 ...How can I get to read the first two or first
    >>three decimal values with out rounding them. Any suggestions are
    >>appreciated. I am BEGINNER TO C PROGRAAMING. Thanks

    >
    >
    > Your question is very ambiguous. First you talk about truncating a
    > floating point variable. Then you talk about reading data. Describe
    > what you really want to do.
    >
    > When composing your question, consider the following:
    >
    > There are many systems for representing floating point variables.
    > I do not know of any that use decimal.


    There are, for the finance sector; see for example
    http://www2.hursley.ibm.com/decimal/

    > In all of the binary systems I
    > am familiar with, most decimal values cannot be represented exactly.
    > Thus, the value 3.14 will be stored in a float (or double) as some
    > value that is close to 3.14 but that has an "error" in the outer
    > decimal positions, something like 3.14000004 or 3.13999998.
    >
    > What is your starting point? Is the value of pi already in a
    > float or double? Is it in a file to be read? If so, it what format
    > (character, binary, etc)?
    >
    > What do you want the result to be? Another floating point value?
    > How many significant digits? A character string? How long?


    I am not sure but I think the Op either wants
    targetnumber = floor(PI*100)/100;
    or
    snprintf(targetstring, 4, "%g", PI);
    where the 4 stems from '3', '.', and two additional digits.

    This assumes PI >= 0.


    Cheers
    Michael
    --
    E-Mail: Mine is an /at/ gmx /dot/ de address.
     
    Michael Mair, Oct 23, 2005
    #3
  4. Hi Barry,
    The value of pi is already in a float ... and the output comes till
    like 6-7 decimal points. I want the value of pi till 2 decimal points
    with out getting round off ... and which could be assigned to another
    variable (any). Thanks
    vishnu
     
    VISHNU VARDHAN REDDY UNDYALA, Oct 23, 2005
    #4
  5. On 23 Oct 2005 15:16:36 -0700, "VISHNU VARDHAN REDDY UNDYALA"
    <> wrote:

    >Hi Barry,
    >The value of pi is already in a float ... and the output comes till
    >like 6-7 decimal points. I want the value of pi till 2 decimal points
    >with out getting round off ... and which could be assigned to another
    >variable (any). Thanks
    >vishnu


    You need to quote some context. Not everyone will remember what you
    talked about in a previous message.

    Use sprintf to convert the value to a string. Truncate the string
    after the fourth character by storing a '\0' in the fifth position.
    Use strtod or sscanf to evaluate the string and place the value in the
    numeric variable of your choice. Be aware that the value will not be
    exact for the reasons I discussed in my first message.


    <<Remove the del for email>>
     
    Barry Schwarz, Oct 24, 2005
    #5
  6. "VISHNU VARDHAN REDDY UNDYALA" <> writes:
    > The value of pi is already in a float ... and the output comes till
    > like 6-7 decimal points. I want the value of pi till 2 decimal points
    > with out getting round off ... and which could be assigned to another
    > variable (any). Thanks


    Don't assume that your readers are able to see the article to which
    you're replying.

    If you want to post a followup via groups.google.com, don't use
    the broken "Reply" link at the bottom of the article. Click on
    "show options" at the top of the article, then click on the
    "Reply" at the bottom of the article headers.

    Please complain to Google about their broken interface.

    What exactly do you mean by "without getting round off"? Do you mean
    that you want the result truncated rather than rounded, so for 4
    decimal placed you get 3.1415 rather than 3.1416?

    As Barry Schwarz already told you, what you're asking for is basically
    not possible. Given a floating-point value approximating pi, you can
    obtain a value that *approximates* the value of pi truncated to 2
    decimal places (3.14), but the exact value 3.14 cannot be represented
    in binary floating-point.

    Here's a program that demonstrates the problem. (Note that I used
    double rather than float.)

    #include <math.h>
    #include <stdio.h>
    int main(void)
    {
    double pi = 4.0 * atan(1.0);
    double pi2 = floor(pi * 100.0) / 100.0;
    double pi4 = floor(pi * 10000.0) / 10000.0;
    printf("pi = %f, really %.20f\n", pi, pi);
    printf("pi2 = %f, really %.20f\n", pi2, pi2);
    printf("pi4 = %f, really %.20f\n", pi4, pi4);
    return 0;
    }

    And here's the output I got (it may be slightly different on your
    system):

    pi = 3.141593, really 3.14159265358979311600
    pi2 = 3.140000, really 3.14000000000000012434
    pi4 = 3.141500, really 3.14150000000000018119

    Presumably truncating the value like this is a means to an end rather
    than an end in itself. What exactly are you trying to accomplish?

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    We must do something. This is something. Therefore, we must do this.
     
    Keith Thompson, Oct 24, 2005
    #6
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jitesh Sinha
    Replies:
    1
    Views:
    646
    Munsifali Rashid
    Dec 5, 2003
  2. Jason Williard

    Truncating Variables

    Jason Williard, Oct 15, 2004, in forum: ASP .Net
    Replies:
    11
    Views:
    5,380
    Kevin Spencer
    Oct 18, 2004
  3. uy_do
    Replies:
    1
    Views:
    678
    Harish Madhavan
    Dec 4, 2003
  4. BemusedByQM

    truncating java 'doubles'

    BemusedByQM, Jul 24, 2005, in forum: Java
    Replies:
    2
    Views:
    17,461
    jfalt
    Jul 25, 2005
  5. teeshift
    Replies:
    2
    Views:
    283
    Chris Pearl
    Dec 1, 2006
Loading...

Share This Page