簡體   English   中英

如何在Java中針對特定格式驗證float?

[英]how to validate float against specific format in java?

我想驗證浮點類型數據。 我將規則定義為

int precision1 = 3;
int precision2 = 2;

上述規則表示數據格式應為999.99

預期的1234.56驗證應因上述規則而失敗。 同樣,對於上述規則中的浮點數123.456,預期的驗證也將失敗。 預期的123.33驗證應該成功。

關於驗證過程的任何想法將不勝感激。

謝謝凱基

快速又骯臟:

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

用戶輸入一個String,將其轉換為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 =>有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM