我想验证float类型数据。我将规则定义为
int precision1 = 3;
int precision2 = 2;
以上规则表明数据格式应为999.99
1234.56的预期验证应该不符合上述规则。 对于上述规则中的浮点123.456,预期验证也应该失败。 123.33的预期验证应该是成功的。
任何想法都会在验证过程中受到赞赏。
谢谢, Kaygee
答案 0 :(得分:2)
又快又脏:
int precision1 = 3;
int precision2 = 2;
float var = 123.12f;
String varStr = String.valueOf(var);
if (varStr.length() == (precision1 + precision2 + 1) && varStr.indexOf(".") == precision1) {
System.out.println(true);
} else {
System.out.println(false);
}
答案 1 :(得分:1)
用户输入一个String,它在某处转换为float,然后尝试验证float。你不能这样做。
float的String表示形式是人工制品。另外,浮点数往往只接近(非常接近)转换后的String的值。
如果要验证精度,唯一的方法是验证用户输入字符串。如果你想保持精度,可以像串一样存储它。
如果您需要一个数字,例如要计算,请使用BigDecimal。它旨在精确地保持精确度(对于财务计算很重要)。他们不是很好可以使用,但如果你想要精确的非整数值,那就是你付出的代价。
修改强>
如何使用BigDecimal。
BigDecimal b1 = new BigDecimal("1234.23");
System.out.println(b1 + " scale was " + b1.scale()); 2
BigDecimal b2 = new BigDecimal("1234.523536223");
System.out.println(b2 + " scale was " + b2.scale()); // 9
显然,您可以使用比例测试“精度”。如果b1.scale()== 2 || b1.scale()== 3 =>有效的。