2013-11-10 47 views
3

标题几乎说这一切...float的字符串表示的最大可能长度是多少?

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

例如,对于一个整数

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

UPDATE

我已经测试了以下内容:

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是最大长度

+0

为什么要检查浮点数的字符串表示形式的字符数?为什么你不能直接使用float? – Lokesh

+2

['-Float.MAX_VALUE'](http://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#MAX_VALUE)? – Maroun

+0

@Lokesh说实话,我不需要**这个。我目前只是使用'Float.valueOf(field.getText())'来获取该字段的输入,并且工作正常。但是我所有的其他领域都被限制在一个最大长度,所以我希望能为这个领域做同样的事情。 – firyice

回答

4

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

如果你希望用户输入要允许任何浮点值在Java表示的一样

1000000000000000000000000000000000000000000000000000000000000000 

甚至

000000000000000000000000000000000000000000000000000000000.00000000000000000000001 

限制输入框的,应根据企业的事情不需要上规则“我对所有其他领域有限制”。

这里的“生意”规则到目前为止似乎是“可以被解析并存储到一个浮动”

还要注意的是限制输入长度往往防止输入(通过剪切&粘贴)的东西,它是长度并且只有在编辑后才能成为有效的输入。所以它实际上降低了可用性。

+0

谢谢你帮我认识到我早上3点思考过程中的错误。 – firyice

1

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

这台电脑上的结果是:

Max. float length: 15 (-1.09045365E-32) 

这是一个反例到您-Float.MAX_VALUE

有时知道什么最大长度是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 + ")"); 
    } 

} 
相关问题