iOS小數(shù)點格式化:最多保留兩位小數(shù),小數(shù)點后末尾的0不要

需求

如題的需求,再詳細(xì)解釋一下就是:
1.如果有兩位小數(shù)不為0則保留兩位小數(shù),eg: "0.23"
2.如果有一位小數(shù)不為0則保留一位小數(shù),否則顯示整數(shù), eg: "0.2" "0"
也就是說,不能出現(xiàn)"0.20","0.00"這種情況。

平時在項目開發(fā)中,格式化小數(shù)乘字符串是時候,經(jīng)常會保留2位小數(shù)處理,不足則用0補(bǔ)全,也就是在格式化方法中用 %.2f 作占位符,來占位小數(shù)。這樣得出來的字符串肯定是類似"X.XX"的字符串,且如果不足兩位小數(shù),都會用0來補(bǔ)全。

然鵝現(xiàn)在的需求變了,要求保留兩位小數(shù),且能不顯示0就不顯示。

解決方法

OC:

/**
 過濾器/ 將.2f格式化的字符串,去除末尾0

 @param numberStr .2f格式化后的字符串
 @return 去除末尾0之后的
 */
- (NSString *)removeSuffix:(NSString *)numberStr{
    if (numberStr.length > 1) {
        
        if ([numberStr componentsSeparatedByString:@"."].count == 2) {
            NSString *last = [numberStr componentsSeparatedByString:@"."].lastObject;
            if ([last isEqualToString:@"00"]) {
                numberStr = [numberStr substringToIndex:numberStr.length - (last.length + 1)];
                return numberStr;
            }else{
                if ([[last substringFromIndex:last.length -1] isEqualToString:@"0"]) {
                    numberStr = [numberStr substringToIndex:numberStr.length - 1];
                    return numberStr;
                }
            }
        }
        return numberStr;
    }else{
        return nil;
    }
}

Swift

    /// 過濾器 將.2f格式化的字符串,去除末尾0
    ///
    /// - Parameter numberString: .2f格式化后的字符串
    /// - Returns: 去除末尾0之后的
    func removeSuffix(numberString : String) -> String {
        
        if numberString.count > 1 {
            let strs = numberString.components(separatedBy: ".")
            let last = strs.last!
            if strs.count == 2 {
                if last == "00" {
                    
                    let indexEndOfText      = numberString.index(numberString.endIndex, offsetBy:-3)
                    return String(numberString[..<indexEndOfText])
                    
                }else{
                    
                    let indexStartOfText    = numberString.index(numberString.endIndex, offsetBy:-1)
                    let str                 = numberString[indexStartOfText...]
                    let indexEndOfText      = numberString.index(numberString.endIndex, offsetBy:-1)
                    if str == "0" {
                        return String(numberString[..<indexEndOfText])
                    }
                    
                }
                
            }
            
            return numberString
            
        }else{
            return ""
        }
    }

思路:1.先將小數(shù)按照.2f格式化處理成“0.00”;
2.然后再根據(jù)小數(shù)點".",切割字符串比較,判斷最后的是不是“0”,是的話,直接切除掉;

同樣思路的也適用于格式化.3f的情況,判斷方法中再加入“000”的判斷,然后判斷切割后的字符串。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容