簡體   English   中英

樓層小數點后兩位

[英]floor double by decimal place

我想用可變的十進制長度(在iPhone sdk中)將其double乘以其小數位。

這里有一些例子來告訴你我的意思

NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:2); // should return 34.52
NSLog(@"%f",[self floorMyNumber:34.52662 toPlace:2); // should return 34.52

NSLog(@"%f",[self floorMyNumber:34.52432 toPlace:3); // should return 34.524
NSLog(@"%f",[self floorMyNumber:34.52462 toPlace:3); // should return 34.524

NSLog(@"%f",[self floorMyNumber:34.12462 toPlace:0); // should return 34.0
NSLog(@"%f",[self floorMyNumber:34.92462 toPlace:0); // should return 34.0

任何想法如何做到這一點?

-(double)floorNumberByDecimalPlace:(float)number place:(int)place {
    return (double)((unsigned int)(number * (double)pow(10.0,(double)place))) / (double)pow(10.0,(double)place);
}

另一個解決方案:

放置為10(示例:13.1),100(示例:12.31),依此類推

雙精度值=(雙精度)((無符號整數)(值*(雙精度)放置))/(雙精度)放置

如果只是為了打印它們而將它們四舍五入,則可以使用標准的printf格式說明符進行此操作。 例如,要打印3個小數,可以使用“%.3f”代替“%f”

使用sprintf(或更好的snprintf)將其格式化為字符串,然后裁剪字符串的末尾。

將其乘以10 ^(小數位),將其轉換為整數,然后除以10 ^(小數位)。

double floorToPlace(double number, int places)
{
    int decimalPlaces = 1;
    for (int i = 0; i < places; i++) divideBy *= 10;

    return (int)(number * decimalPlaces) / (double)decimalPlaces;
}

暫無
暫無

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

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