code: func (value Value) number() (number _number) {
  	switch value := value.value.(type) {
  	case int8:
  		number.int64 = int64(value)
  		return
  	case int16:
  		number.int64 = int64(value)
  		return
  	case uint8:
  		number.int64 = int64(value)
  		return
  	case uint16:
  		number.int64 = int64(value)
  		return
  	case uint32:
  		number.int64 = int64(value)
  		return
  	case int:
  		number.int64 = int64(value)
  		return
  	case int64:
  		number.int64 = value
  		return
  	}
  
  	float := value.float64()
  	if float == 0 {
  		return
  	}
  
  	number.kind = numberFloat
  	number.float64 = float
  
  	if math.IsNaN(float) {
  		number.kind = numberNaN
  		return
  	}
  
  	if math.IsInf(float, 0) {
  		number.kind = numberInfinity
  	}
  
  	if float >= float_maxInt64 {
  		number.int64 = math.MaxInt64
  		return
  	}
  
  	if float <= float_minInt64 {
  		number.int64 = math.MinInt64
  		return
  	}
  
  	integer := float64(0)
  	if float > 0 {
  		integer = math.Floor(float)
  	} else {
  		integer = math.Ceil(float)
  	}
  
  	if float == integer {
  		number.kind = numberInteger
  	}
  	number.int64 = int64(float)
  	return
  }
docs: // FIXME
  // http://www.goinggo.net/2013/08/gustavos-ieee-754-brain-teaser.html
  // http://bazaar.launchpad.net/~niemeyer/strepr/trunk/view/6/strepr.go#L160