簡體   English   中英

Objective-C中的圓形雙

[英]Round double in Objective-C

我想將 Objective-C 中的小數點后一位四舍五入。

在 Swift 我可以通過擴展來做到這一點:

public extension Double {
    /// Rounds the double to decimal places value
    func rounded(toPlaces places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

但是,顯然你不能從 Objective-C 調用原語的擴展,所以我不能使用擴展。

我很樂意直接或作為字符串對雙精度進行舍入,但是,以下都不起作用:

 double mydub = 122.12022222223322;
 NSString *axtstr = [NSString stringWithFormat:@"%2f", mydub]; //gives 122.120222

 double rounded = (round(mydub*10)) / 10.0; //gives 122.100000

如何轉換 122.12022222223322; 進入122.1?

你需要在%2f之間加上一個小數

[NSString stringWithFormat:@"%.2f", mydub];

double mydouble = 122.12022222223322;
NSString *str = [NSString stringWithFormat:@"%.2f", mydouble];
// = @"122.12"

.. 不會舍mydouble 相反,它只會將格式應用於 output 作為字符串。

double d = 122.49062222223322;
NSString *dStr = [NSString stringWithFormat:@"%.f %.1f %.2f %.3f", d, d, d, d];
// = @"122 122.5 122.49 122.491"

由於 Objective-C 與 C 共享語言規則,您可以安全地使用

#include <math.h>

double rounded = round(mydouble);
// = 122.000000

當然,你可以用乘法和除以你想要的十的冪來移動逗號。

double commashifted = round(mydouble*100.0)/100.0;
// = 122.120000;

如果你真的喜歡 Objective-C 類在豪華版中做同樣的事情,請查看Foundation Framework中的'NSDecimal.h'

最后但同樣重要的是,您可以對 C 執行與對 swift 相同的操作。

double roundbycomma(int commata, double zahl) {
    double divisor = pow(10.0, commata);
    return round(zahl * divisor) / divisor;
}

暫無
暫無

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

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