fixnum problem plz help

Discussion in 'Ruby' started by Guy Dols, Mar 3, 2009.

  1. Guy Dols

    Guy Dols Guest

    hy

    i am new to ruby i am trieng to get some skils but i have a problem when
    i use a fixnum :

    years = ask("")
    days = years * 365
    puts days


    my answer is
    222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

    but i should be 730

    i have an screenshot as an attachment plz help me
    --
    Posted via http://www.ruby-forum.com/.
     
    Guy Dols, Mar 3, 2009
    #1
    1. Advertising

  2. Guy Dols wrote:
    > hy
    >
    > i am new to ruby i am trieng to get some skils but i have a problem when
    > i use a fixnum :
    >
    > years = ask("")
    > days = years * 365
    > puts days
    >
    >
    > my answer is
    > 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    >
    > but i should be 730
    >
    > i have an screenshot as an attachment plz help me
    >

    Please paste your ask() Method. That appears to be where the problem is.

    =======================================================================
    This email, including any attachments, is only for the intended
    addressee. It is subject to copyright, is confidential and may be
    the subject of legal or other privilege, none of which is waived or
    lost by reason of this transmission.
    If the receiver is not the intended addressee, please accept our
    apologies, notify us by return, delete all copies and perform no
    other act on the email.
    Unfortunately, we cannot warrant that the email has not been
    altered or corrupted during transmission.
    =======================================================================
     
    Michael Malone, Mar 3, 2009
    #2
    1. Advertising

  3. Guy Dols <> writes:

    > hy
    >
    > i am new to ruby i am trieng to get some skils but i have a problem when
    > i use a fixnum :
    >
    > years = ask("")
    > days = years * 365
    > puts days
    >
    >
    > my answer is
    > 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    >
    > but i should be 730



    I think you are lying. Twice.

    First, the answer is probably not what you're telling but rather:

    22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

    Then it should NOT be 730, but what you get.

    This is because for all we know, ask("") is returning "2" and 365
    times "2" is a string containing 365 2s. At least in such a inferior
    language as Ruby.



    In more strongly typed programming languages such as Common Lisp,
    you'd get an error:

    C/USER[929]> (* "2" 365)

    *** - *: "2" is not a number



    > i have an screenshot as an attachment plz help me


    Good for you!


    --
    __Pascal Bourguignon__
     
    Pascal J. Bourguignon, Mar 3, 2009
    #3
  4. Pascal J. Bourguignon wrote:
    > Guy Dols <> writes:
    >
    >
    >> hy
    >>
    >> i am new to ruby i am trieng to get some skils but i have a problem when
    >> i use a fixnum :
    >>
    >> years = ask("")
    >> days = years * 365
    >> puts days
    >>
    >>
    >> my answer is
    >> 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    >>
    >> but i should be 730
    >>

    >
    >
    > I think you are lying. Twice.
    >
    > First, the answer is probably not what you're telling but rather:
    >
    > 22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    >
    > Then it should NOT be 730, but what you get.
    >
    > This is because for all we know, ask("") is returning "2" and 365
    > times "2" is a string containing 365 2s. At least in such a inferior
    > language as Ruby.
    >
    >

    Unsuccessful troll is unsuccessful.
    >
    > In more strongly typed programming languages such as Common Lisp,
    > you'd get an error:
    >
    > C/USER[929]> (* "2" 365)
    >
    > *** - *: "2" is not a number
    >
    >
    >
    >
    >> i have an screenshot as an attachment plz help me
    >>

    >
    > Good for you!
    >
    >
    >



    =======================================================================
    This email, including any attachments, is only for the intended
    addressee. It is subject to copyright, is confidential and may be
    the subject of legal or other privilege, none of which is waived or
    lost by reason of this transmission.
    If the receiver is not the intended addressee, please accept our
    apologies, notify us by return, delete all copies and perform no
    other act on the email.
    Unfortunately, we cannot warrant that the email has not been
    altered or corrupted during transmission.
    =======================================================================
     
    Michael Malone, Mar 3, 2009
    #4
  5. Guy Dols

    Ken Bloom Guest

    On Tue, 03 Mar 2009 16:28:48 -0500, Guy Dols wrote:

    > hy
    >
    > i am new to ruby i am trieng to get some skils but i have a problem when
    > i use a fixnum :
    >
    > years = ask("")
    > days = years * 365
    > puts days
    >
    >
    > my answer is
    >

    222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    >
    > but i should be 730
    >
    > i have an screenshot as an attachment plz help me


    Ask is returning the string "2" instead of the number 2.
    When you use the multiplication operator on a string, it creates a longer
    string with that many copies of the string concatenated back to back, so
    instead of multiplying the number 2 by 365 to give 730, you got a string
    containing exactly 365 twos.

    years=ask("").to_i

    --Ken

    --
    Chanoch (Ken) Bloom. PhD candidate. Linguistic Cognition Laboratory.
    Department of Computer Science. Illinois Institute of Technology.
    http://www.iit.edu/~kbloom1/
     
    Ken Bloom, Mar 3, 2009
    #5
  6. Guy Dols

    Tom Cloyd Guest

    Pascal J. Bourguignon wrote:
    > Guy Dols <> writes:
    >
    >
    >> hy
    >>
    >> i am new to ruby i am trieng to get some skils but i have a problem when
    >> i use a fixnum :
    >>
    >> years = ask("")
    >> days = years * 365
    >> puts days
    >>
    >>
    >> my answer is
    >> 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    >>
    >> but i should be 730
    >>

    >
    >
    > I think you are lying. Twice.
    >
    > First, the answer is probably not what you're telling but rather:
    >
    > 22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
    >
    > Then it should NOT be 730, but what you get.
    >
    > This is because for all we know, ask("") is returning "2" and 365
    > times "2" is a string containing 365 2s. At least in such a inferior
    > language as Ruby.
    >
    >
    >
    > In more strongly typed programming languages such as Common Lisp,
    > you'd get an error:
    >
    > C/USER[929]> (* "2" 365)
    >
    > *** - *: "2" is not a number
    >
    >
    >
    >
    >> i have an screenshot as an attachment plz help me
    >>

    >
    > Good for you!
    >
    >
    >

    And for the benefits, such as they are, of strong typing, we get to a
    whole other level of detail to attend to. No thanks. Did that for a time
    with Pascal. I prefer the mindless grace of waterfowl.

    t.

    --

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
    Bellingham, Washington, U.S.A: (360) 920-1226
    << >> (email)
    << TomCloyd.com >> (website)
    << sleightmind.wordpress.com >> (mental health weblog)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     
    Tom Cloyd, Mar 4, 2009
    #6
  7. Pascal J. Bourguignon wrote:

    > This is because for all we know, ask("") is returning "2" and 365
    > times "2" is a string containing 365 2s. At least in such a inferior
    > language as Ruby.
    >
    >
    >
    > In more strongly typed programming languages such as Common Lisp,


    Typo. Should be Commune Lisp.

    > you'd get an error:
    >
    > C/USER[929]> (* "2" 365)
    >
    > *** - *: "2" is not a number


    Commune Lisp:
    (* "2" 9)
    *** ERROR!!! ***

    Awk:
    "2" * 9
    18

    Ruby:
    "2" * 9
    "222222222"

    Now, which is the lowest-level language?
     
    William James, Mar 4, 2009
    #7
  8. Pascal J. Bourguignon wrote:
    > In more strongly typed programming languages such as Common Lisp,
    > you'd get an error:
    >
    > C/USER[929]> (* "2" 365)
    >
    > *** - *: "2" is not a number


    This is nothing to do with "strongly typed". Ruby's concept of the
    difference between a string and an integer is just as strict as LISP's.

    Rather, Ruby provides semantics to the '*' operator/function for strings
    which LISP doesn't.

    You can get exactly the behaviour you desire by _removing_ some Ruby
    functionality.

    irb(main):001:0> String.class_eval { undef_method:)*) }
    => String
    irb(main):002:0> "2" * 365
    NoMethodError: undefined method `*' for "2":String
    from (irb):2
    from :0
    --
    Posted via http://www.ruby-forum.com/.
     
    Brian Candler, Mar 4, 2009
    #8
  9. 2009/3/4 William James <>:
    > Pascal J. Bourguignon wrote:
    >
    >> This is because for all we know, ask("") is returning "2" and 365
    >> times "2" is a string containing 365 2s. =A0At least in such a inferior
    >> language as Ruby.
    >>
    >>
    >>
    >> In more strongly typed programming languages such as Common Lisp,

    >
    > Typo. =A0Should be Commune Lisp.
    >
    >> you'd get an error:
    >>
    >> C/USER[929]> (* "2" 365)
    >>
    >> *** - *: "2" is not a number

    >
    > Commune Lisp:
    > =A0(* "2" 9)
    > =A0*** ERROR!!! ***
    >
    > Awk:
    > =A0"2" * 9
    > =A018
    >
    > Ruby:
    > =A0"2" * 9
    > =A0"222222222"


    C:
    printf("%d\n",'2'*9);
    450


    --=20
    Thomas Preymesser

    http://thopre.googlepages.com/
    http://thopre.wordpress.com/
    Sent from: Berlin Berlin Deutschland.
     
    Thomas Preymesser, Mar 4, 2009
    #9
    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. Replies:
    1
    Views:
    415
  2. Replies:
    2
    Views:
    367
    Nick Keighley
    Nov 24, 2006
  3. Replies:
    1
    Views:
    383
  4. Heesob Park

    Why Fixnum===Fixnum is false?

    Heesob Park, May 13, 2009, in forum: Ruby
    Replies:
    5
    Views:
    139
    Joel VanderWerf
    May 14, 2009
  5. MaggotChild
    Replies:
    6
    Views:
    151
    MaggotChild
    Dec 2, 2009
Loading...

Share This Page