public static Number toNumber(String string)
  {
    BigDecimal bigDecimal = new BigDecimal(string);
    if (StringUtils.containsAny(string, '.', 'e', 'E'))
    {
      double d = bigDecimal.doubleValue();
      if (Double.isFinite(d))
      {
        return d;
      }
      else
      {
        return bigDecimal;
      }
    }
    else
    {
      long l = bigDecimal.longValueExact();
      int i = (int) l;
      if (i == l)
      {
        return (int) l;
      }
      else
      {
        return l;
      }
    }
  }
@Test
  public void testToNumber()
  {
    Number n1 = PdlParseUtils.toNumber("1");
    assertEquals(n1.getClass(), Integer.class);
    assertEquals(n1.intValue(), 1);

    Number n10000000000 = PdlParseUtils.toNumber("10000000000");
    assertEquals(n10000000000.getClass(), Long.class);
    assertEquals(n10000000000.longValue(), 10000000000L);

    Number n1_0 = PdlParseUtils.toNumber("1.0");
    assertEquals(n1_0.getClass(), Double.class);
    assertEquals(n1_0.doubleValue(), 1.0d, 0.001d);

    Number n1_0e10 = PdlParseUtils.toNumber("1234567.1e1000");
    assertEquals(n1_0e10.getClass(), BigDecimal.class);
  }