top | item 13809171

Ask HN: Why can't I write a int literal like 2,333?

3 points| ljw1001 | 9 years ago | reply

Why don't more programming languages support numeric literals written with comma separators (or periods for europe.

10 comments

order
[+] fiedzia|9 years ago|reply
Because:

a) comma has already defined meaning so it could be ambiguous - it would mean tuple (2,333) in python for example

b) even if its not the case, its easy to confuse it with floats, and you do not want apply local numerical conventions to code and discover one day that all your ints are floats because some setting was different

c) you can write it as 2_333 in growing number of languages

[+] Piskvorrr|9 years ago|reply
Oh yeah, let's have more of the ambiguity that CSVs have: is it a comma between arguments? Is it a decimal comma? Is it a thousands separator? Is my locale correct for parsing this? What was the author's intended and actual locale?

On the other hand, what improvement does this bring? ... "it is supposed to look pretty."

[+] CarolineW|9 years ago|reply
What syntax would you then use for calling a function with multiple parameters? Function f takes two ints and I call it like this: f(3,456,789)

What are its parameters?

[+] brudgers|9 years ago|reply

  f (3,456 789)
or

  f(3 456,789)
or

  f(3,456,789)
depending on intent. I mean the requirement of a common as a separator seems superfluous -- particularly in languages like Python which rely heavily on semantic whitespace.
[+] mailslot|9 years ago|reply
In C++1y/C++14, you can use the apostrophe. i.e. 2'333

They took a backward compatible approach by using a symbol that's not already used for other operations, like "," or "." or ";" The grammar would be non-trivial or too restricted otherwise, IMO.

[+] bengunnink|9 years ago|reply
Recent Java versions did something similar, allowing underscore characters, e.g., 7_000_000.
[+] bjourne|9 years ago|reply
Factor (http://factorcode.org/) supports that syntax:

  3,400,000,000 3400000000 =
  9,312 9312 =
  4,294,967,296 4294967296 =
  
It's pretty useful for writing large numbers.