2017-11-03 13:13:09 +01:00
|
|
|
using System;
|
|
|
|
using System.Globalization;
|
|
|
|
using System.Reflection;
|
2017-10-26 16:41:14 +02:00
|
|
|
namespace sharp.json
|
|
|
|
{
|
|
|
|
public class JSONNumber: JSON
|
|
|
|
{
|
|
|
|
Int64 intValue;
|
|
|
|
Double doubleValue;
|
|
|
|
|
|
|
|
public JSONNumber()
|
|
|
|
:base(JSONTypes.Number)
|
|
|
|
{
|
|
|
|
intValue = 0;
|
|
|
|
doubleValue = Double.NaN;
|
|
|
|
}
|
|
|
|
public JSONNumber(Int64 i)
|
|
|
|
:base(JSONTypes.Number)
|
|
|
|
{
|
|
|
|
intValue = i;
|
|
|
|
doubleValue = Double.NaN;
|
|
|
|
}
|
|
|
|
public JSONNumber(Double d)
|
|
|
|
:base(JSONTypes.Number)
|
|
|
|
{
|
|
|
|
intValue = (Int64)d;
|
|
|
|
doubleValue = d;
|
|
|
|
}
|
|
|
|
|
2017-11-03 13:13:09 +01:00
|
|
|
public override double Double
|
2017-10-26 16:41:14 +02:00
|
|
|
{
|
2017-11-03 13:13:09 +01:00
|
|
|
get
|
|
|
|
{
|
|
|
|
if (!Double.IsNaN(doubleValue)){
|
|
|
|
return doubleValue;
|
|
|
|
} else {
|
|
|
|
return (double)intValue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public override long Integer
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
if (!Double.IsNaN(doubleValue)){
|
|
|
|
return (int)doubleValue;
|
|
|
|
} else {
|
|
|
|
return intValue;
|
|
|
|
}
|
2017-10-26 16:41:14 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-11-03 13:13:09 +01:00
|
|
|
public override string String
|
|
|
|
{
|
|
|
|
get
|
|
|
|
{
|
|
|
|
if (!Double.IsNaN(doubleValue))
|
|
|
|
{
|
|
|
|
return doubleValue.ToString();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return intValue.ToString();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public override string[] prettyPrint()
|
|
|
|
{
|
|
|
|
return new string[] { ToString() };
|
|
|
|
}
|
|
|
|
|
2017-10-26 16:41:14 +02:00
|
|
|
public override string ToString()
|
|
|
|
{
|
2017-11-03 13:13:09 +01:00
|
|
|
if (Double.IsNaN(doubleValue))
|
|
|
|
{
|
|
|
|
return this.intValue.ToString();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
return this.doubleValue.ToString(CultureInfo.InvariantCulture);
|
|
|
|
}
|
2017-10-26 16:41:14 +02:00
|
|
|
}
|
2017-11-03 13:13:09 +01:00
|
|
|
|
|
|
|
public bool IsInteger(){
|
|
|
|
return Double.IsNaN(doubleValue);
|
|
|
|
}
|
|
|
|
|
2017-10-26 16:41:14 +02:00
|
|
|
}
|
|
|
|
}
|