头衔说明了一切..。
我试图在表单上强制执行文本输入的最大长度。其中一个字段可以是任何有效的浮点数.它的最大长度是多少?
例如,对于整数
// 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是最大长度
发布于 2013-11-10 08:05:06
浮点值的最大长度没有意义。
如果希望用户输入任何可由java表示的浮点值,则需要允许类似的内容
1000000000000000000000000000000000000000000000000000000000000000甚至是
000000000000000000000000000000000000000000000000000000000.00000000000000000000001输入字段的限制应该基于业务需求,而不是像“我对所有其他字段都有限制”这样的规则。
到目前为止,这里的“业务”规则似乎是“可以解析并存储在浮动中”。
还要注意的是,限制输入长度通常会阻止更长的输入(通过剪切和粘贴),并且只有经过一些编辑之后才会成为有效的输入。所以它实际上降低了可用性。
发布于 2014-10-31 08:45:25
可以通过简单地测试随机值来提供反例,直到找到稳定的最大值为止。这种方法的一个可能的问题是只能找到局部最大值,而不是穷尽的全局最大值。
在这个个人电脑上的结果是:
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 + ")");
}
}https://stackoverflow.com/questions/19887322
复制相似问题