public static Number parseNumber(String numberStr) throws NumberFormatException {
		if (StrUtil.startWithIgnoreCase(numberStr, "0x")) {
			// 0x04表示16进制数
			return Long.parseLong(numberStr.substring(2), 16);
		} else if (StrUtil.startWith(numberStr, '+')) {
			// issue#I79VS7
			numberStr = StrUtil.subSuf(numberStr, 1);
		}

		try {
			final NumberFormat format = NumberFormat.getInstance();
			if (format instanceof DecimalFormat) {
				// issue#1818@Github
				// 当字符串数字超出double的长度时，会导致截断，此处使用BigDecimal接收
				((DecimalFormat) format).setParseBigDecimal(true);
			}
			return format.parse(numberStr);
		} catch (ParseException e) {
			final NumberFormatException nfe = new NumberFormatException(e.getMessage());
			nfe.initCause(e);
			throw nfe;
		}
	}
@Test
	public void parseNumberTest3(){

		// -------------------------- Parse failed -----------------------

		assertNull(NumberUtil.parseNumber("abc", (Number) null));

		assertNull(NumberUtil.parseNumber(StrUtil.EMPTY, (Number) null));

		assertNull(NumberUtil.parseNumber(StrUtil.repeat(StrUtil.SPACE, 10), (Number) null));

		assertEquals(456, NumberUtil.parseNumber("abc", 456).intValue());

		// -------------------------- Parse success -----------------------

		assertEquals(123, NumberUtil.parseNumber("123.abc", 789).intValue());

		assertEquals(123.3D, NumberUtil.parseNumber("123.3", (Number) null).doubleValue());

		assertEquals(0.123D, NumberUtil.parseNumber("0.123.3", (Number) null).doubleValue());

	}