如何在java中针对特定格式验证float?

时间:2011-09-12 18:19:04

标签: java

我想验证float类型数据。我将规则定义为

int precision1 = 3;
int precision2 = 2;

以上规则表明数据格式应为999.99

1234.56的预期验证应该不符合上述规则。 对于上述规则中的浮点123.456,预期验证也应该失败。 123.33的预期验证应该是成功的。

任何想法都会在验证过程中受到赞赏。

谢谢, Kaygee

2 个答案:

答案 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 =>有效的。