首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串的最大可能长度是什么?浮点的表示形式?

问字符串的最大可能长度是什么?浮点的表示形式?
EN

Stack Overflow用户
提问于 2013-11-10 07:31:08
回答 2查看 1.8K关注 0票数 5

头衔说明了一切..。

我试图在表单上强制执行文本输入的最大长度。其中一个字段可以是任何有效的浮点数.它的最大长度是多少?

例如,对于整数

代码语言:javascript
复制
// negative sign makes MIN_VALUE larger than MAX_VALUE
String.valueOf(Integer.MIN_VALUE).length();

更新

我测试了以下几个方面:

代码语言:javascript
复制
String.valueOf(-Float.MIN_VALUE).length();
String.valueOf(-Float.MAX_VALUE).length();
String.valueOf( Float.MIN_VALUE).length();
String.valueOf( Float.MAX_VALUE).length();

这给了我以下输出:

代码语言:javascript
复制
8
13
7
12

我不相信13是最大长度

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-10 08:05:06

浮点值的最大长度没有意义。

如果希望用户输入任何可由java表示的浮点值,则需要允许类似的内容

代码语言:javascript
复制
1000000000000000000000000000000000000000000000000000000000000000

甚至是

代码语言:javascript
复制
000000000000000000000000000000000000000000000000000000000.00000000000000000000001

输入字段的限制应该基于业务需求,而不是像“我对所有其他字段都有限制”这样的规则。

到目前为止,这里的“业务”规则似乎是“可以解析并存储在浮动中”。

还要注意的是,限制输入长度通常会阻止更长的输入(通过剪切和粘贴),并且只有经过一些编辑之后才会成为有效的输入。所以它实际上降低了可用性。

票数 4
EN

Stack Overflow用户

发布于 2014-10-31 08:45:25

可以通过简单地测试随机值来提供反例,直到找到稳定的最大值为止。这种方法的一个可能的问题是只能找到局部最大值,而不是穷尽的全局最大值。

在这个个人电脑上的结果是:

代码语言:javascript
复制
Max. float length: 15 (-1.09045365E-32)

这是你的-Float.MAX_VALUE的反例。

有时候,知道Float.toString()的最大长度是什么很有用,在这种情况下,这个问题是可以回答的。

代码语言:javascript
复制
public class FindMaxStringForPrimitive {

  private static final int MAX_PERIOD = 10000; // Number of iterations before
                                               // concluding answer

  public static void main(String... args) {
    maxFloatLength();
  }

  private static void maxFloatLength() {
    final class Test {
      int    r   = Integer.MIN_VALUE;
      Random rnd = new Random();
      String max = "";

      boolean fit() {
        return fit(Float.intBitsToFloat(rnd.nextInt()));
      }

      boolean fit(float value) {
        String x = Float.toString(value);
        if (x.length() > r) {
          r = x.length();
          max = x;
          return true;
        }
        return false;
      }
    }
    Test test = new Test();
    int i = 0;
    test.fit(Float.MAX_VALUE);
    test.fit(-Float.MAX_VALUE);
    test.fit(Float.MIN_VALUE);
    test.fit(-Float.MIN_VALUE);
    test.fit(Float.NaN);
    test.fit(Float.POSITIVE_INFINITY);
    test.fit(Float.NEGATIVE_INFINITY);
    while (i < MAX_PERIOD)
      if (test.fit()) i = 0;
      else
        i++;
    System.out.println("Max. float length: " + test.r + " (" + test.max + ")");
  }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19887322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档