代码之家  ›  专栏  ›  技术社区  ›  choise

楼层双精度小数点

  •  2
  • choise  · 技术社区  · 14 年前

    我想用可变的十进制长度(在iphonesdk中)将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);
    }
    
    4 回复  |  直到 14 年前
        1
  •  1
  •   Quonux    14 年前

    另一种解决方案:

    double value=(double)((unsigned int)(value*(double)placed))/(double)placed

        2
  •  0
  •   arsenm    14 年前

        3
  •  0
  •   R.. GitHub STOP HELPING ICE    14 年前

    使用sprintf(或者更好的snprintf)将其格式化为字符串,然后裁剪字符串的结尾。

        4
  •  0
  •   zneak    14 年前

    将其乘以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;
    }