【问题标题】:How do I parse ANY Number type from a String in Java?如何从 Java 中的字符串中解析任何数字类型?
【发布时间】:2016-01-06 05:14:29
【问题描述】:

如何从 Java 中的字符串中解析任何数字类型?

我知道像 Integer.parseInt(myString)Double.parseDouble(myString) 这样的方法,但我最想要的是像 Number.parseNumber(myString) 这样不存在的方法。我怎样才能以另一种方式实现这种行为? (我希望解析后的数字能够“准确”地反映字符串,例如小数位数)。

例子:

"0" => 数字(Integer 子类内部)

"0.0" => 数字(在 Double 子类内部)

此外,没有像检查小数分隔符等丑陋的东西。

【问题讨论】:

  • new BigDecimal(yourString)。那应该给你一个Number 代表字符串的值。 (如果您说 但我希望它是 double(如果它是“0.0”)和 int(如果它是“0”),我真的不明白您希望它如何工作. 变量有什么类型,你想存储结果?)
  • 一般来说,你不能。方法重载不允许您混合返回类型。
  • 澄清一下... Float、Double、Integer Long 等都扩展了 Number 超类,它是抽象的,但我仍然可以拥有该类型的变量。我希望它返回一个内部任何这些类的数字
  • 您希望它使用适合的最小类型吗?例如。 “1024”适合ShortInteger Long。理想情况下,我猜您希望它返回 Short
  • 是的。这并不重要,但我希望它返回最合适的子类。

标签: java string-parsing


【解决方案1】:
Number number = NumberFormat.getInstance().parse(myString);

似乎可以解决问题...

【讨论】:

  • 只返回 Long 和 Double。不是你最初要求的。
  • 我在文档中没有看到,但这足以满足我的需要。是的,这正是我所要求的。
  • 这里是 JavaDoc 的链接。 docs.oracle.com/javase/8/docs/api/java/text/…(请注意,parse(String) 的详细信息请参阅parse(String, ParsePosition) 的详细信息以获取更多信息。
  • 我误解了。我认为您的问题是关于 Number 的 any 子类型,包括 BigIntegerBigDecimal,因为您需要“解析后的 Number 以准确反映字符串,例如小数位数”。
  • 即使这是想要的,值得为未来的读者记录这可能不是他们正在寻找的东西(因为他们可能想要一个工厂方法返回的不仅仅是LongDouble。)
【解决方案2】:

更好的方法是使用 BigDecimal 类。

BigDecimal n = new BigDecimal("1.0");

所需值的方法

n.byteValue();  
n.intValue();  
n.shortValue();  
n.longValue();  
n.floatValue();  
n.doubleValue();

【讨论】:

    【解决方案3】:

    您可能正在寻找BigDecimal

    请记住,数字可以以多种形式表示为字符串。例如11.0000000 是同一个数字。

    【讨论】:

      猜你喜欢
      • 2012-04-13
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多