Java 浮点数的字符串表示形式的最大可能长度是多少?

Java 浮点数的字符串表示形式的最大可能长度是多少?,java,floating-point,maxlength,Java,Floating Point,Maxlength,标题几乎说明了一切 我试图在表单上强制执行文本输入的最大长度。其中一个字段可以是任何有效的浮点数。它的最大长度是多少 例如,对于整数 // negative sign makes MIN_VALUE larger than MAX_VALUE String.valueOf(Integer.MIN_VALUE).length(); 更新 我已测试了以下各项: String.valueOf(-Float.MIN_VALUE).length(); String.valueOf(-Float.MAX_

标题几乎说明了一切

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

例如,对于整数

// negative sign makes MIN_VALUE larger than MAX_VALUE
String.valueOf(Integer.MIN_VALUE).length();
更新

我已测试了以下各项:

String.valueOf(-Float.MIN_VALUE).length();
String.valueOf(-Float.MAX_VALUE).length();
String.valueOf( Float.MIN_VALUE).length();
String.valueOf( Float.MAX_VALUE).length();
这给了我以下输出:

8
13
7
12

我不相信13是最大长度

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

如果您希望用户输入任何可由java表示的浮点值,那么您需要允许这样的操作

1000000000000000000000000000000000000000000000000000000000000000
甚至

000000000000000000000000000000000000000000000000000000000.00000000000000000000001
输入字段的限制应基于业务需求,而不是“我对所有其他字段都有限制”之类的规则

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


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

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

这台电脑上的结果是:

Max. float length: 15 (-1.09045365E-32)
这是您的
-Float.MAX\u值的反例

有时了解
Float.toString()
的最大长度很有用,在这种情况下可以回答这个问题

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 + ")");
  }

}
公共类FindMaxStringForPrimitive{
私有静态final int MAX_PERIOD=10000;//之前的迭代次数
//结论性答复
公共静态void main(字符串…参数){
maxFloatLength();
}
私有静态void maxFloatLength(){
期末考试{
int r=整数的最小值;
随机rnd=新随机();
字符串max=“”;
布尔拟合(){
返回拟合(Float.intBitsToFloat(rnd.nextInt());
}
布尔拟合(浮点值){
字符串x=Float.toString(值);
如果(x.length()>r){
r=x.长度();
max=x;
返回true;
}
返回false;
}
}
测试=新测试();
int i=0;
测试配合(浮动最大值);
测试配合(-Float.MAX_值);
测试配合(浮动最小值);
测试配合(-Float.MIN_值);
测试。配合(浮动。NaN);
测试拟合(浮动正无穷大);
测试拟合(浮动负无穷大);
而(i<最大周期)
如果(test.fit())i=0;
其他的
i++;
System.out.println(“最大浮动长度:“+test.r+”(“+test.Max+”)”);
}
}

为什么要检查float的字符串表示形式中的字符数?你为什么不能直接使用float???@Lokesh说实话,我不需要这个。我目前正在使用
Float.valueOf(field.getText())
获取该字段的输入,这很好。但是我所有的其他字段都被限制为最大长度,所以我希望对这个字段也这样做。@marounnaroun我已经测试了
-Float.max\u VALUE
。检查我的更新Question@firyice这是因为表示法,请打印
Float.MAX_VALUE
以更好地理解它。感谢您帮助我认识到凌晨3点思考过程中的错误。