

Python Number Conversion Chart - snakile
https://gist.github.com/Nurdok/4096182

======
obiterdictum
It should be noted that data.encode('hex') and data.decode('hex') would not
work in Python 3.x:

<http://stackoverflow.com/q/12917278/23643>

------
naftaliharris
And for people who want to convert user entered numbers, like "3.2 million",
into strings, I wrote a package especially for that:
<https://github.com/naftaliharris/numutil>

    
    
        >>> from numutil import str2num, num2str
        >>> str2num('1.3 million')
        1300000
        >>> str2num('three and a half')
        Fraction(7, 2)
        >>> str2num('123,456.789')
        123456.789
        >>> num2str(1234567, style='newspaper')
        '1.23 million'
        >>> num2str(1234567, style='words')
        'one million, two hundred thirty four thousand, five hundred sixty seven'

~~~
robbles
Really useful, thanks for making this!

How is the "three and a half" part implemented? Is that just a set of regexes
looking for a couple of common patterns? For example, can it parse something
like "three and three thirds"?

~~~
naftaliharris
Sure, I'm glad you like it! :)

str2num parses words by iterating through them once and keeping state about
the result so far and what I call the "magnitude". So, for example, when you
feed it "three and three thirds", it initializes magnitude and result to zero,
chomps the first "three", and then sets magnitude = 3.

If the next word were "million", then it would know that magnitude refers to
million, and so it would multiply 3 by 1 million. But the next word is "and",
which flushes the magnitude to result, (ie, result += magnitude), and resets
the magnitude to zero.

The next word is "three", which, as before, sets magnitude to three. Then the
next word is "thirds", so you know that magnitude refers to "thirds", and so
you multiply the magnitude by Fraction(1, 3) and add it to result.

    
    
      >>> str2num("three and three thirds")
      Fraction(4, 1)
    

The source for this is here:
[https://github.com/naftaliharris/numutil/blob/master/numutil...](https://github.com/naftaliharris/numutil/blob/master/numutil.py#L72-159)

------
Demiurge
of all the languages, python probably needs this the least. it's been my main
language for 8 years, and once I initially learned the functions, I never
needed to be reminded.

~~~
robbles
I think this kind of reference is useful just to remember what can be done
"out of the box" with the language, especially for polyglot developers.

I've definitely written my own Python hex string -> binary data conversion
function, before I knew some of these tricks. If you spend part of your time
working in JavaScript or PHP, it's easy to forget that you don't have to
reinvent the wheel with Python.

------
niggler
Direct link <https://gist.github.com/Nurdok/4096182>

'oct' should also be added:

    
    
        >>> oct(45)
        '055'
    

One caveat: Python doesn't assume the leading '0' indicates that the number is
octal, so you must specify radix 8:

    
    
        >>> int('055', 8)
        45

~~~
dandellion
Wouldn't it be better to comment on the direct link, where the author is more
likely to see it?

~~~
niggler
Valid point, comment submitted. I assumed the author submitted this to HN in
the first place

------
haven
Ruby translation: <https://gist.github.com/havenwood/5426260>

~~~
haven
Partial Scala translation: <https://gist.github.com/chris-martin/5426294>

