3

The Firebase Java API specifies that Long is a valid type to pass to setValue(). JavaScript only supports a single number type, the equivalent of Java's "double". So if I insert a number from JavaScript and retrieve it later from Java, am I going to get a Long or a Double? Is it a bad idea to use Longs in any cross-platform Firebase code, seeing as how a JavaScript client has no way of creating this type?

Derek Thurn
  • 14,953
  • 9
  • 42
  • 64

1 Answers1

3

Numbers are slotted into either Longs or Doubles on the server. If the number maps exactly to a Long (i.e. is within the range of Longs, and does not have a decimal point), it will be stored as a Long. Otherwise, it will be stored as a Double.

Javascript does have less precision than Java when it comes to Longs, but if you remain within Javascript's limits, you shouldn't have a problem using Longs cross-platform.

Greg Soltis
  • 1,434
  • 9
  • 10
  • So, just to be explicit about the answer here, if I insert a number from JavaScript with no decimal point, it will show up as a Long in Java, right? – Derek Thurn Sep 26 '13 at 20:37
  • Correct. Be aware that Javascript begins to lose precision at 2^53, so if you are dealing with larger numbers, you may want to reconsider using javascript, or consider using an alternate representation. See http://stackoverflow.com/questions/307179/what-is-javascripts-max-int-whats-the-highest-integer-value-a-number-can-go-t for more details on Javascript's Numbers. – Greg Soltis Sep 27 '13 at 00:28