NSDecimal  123.456  => NSDecimal 123.45 这是四舍五入么?

解决方案 »

  1.   

    呵呵  粘错了
    NSDecimal  123.456  => NSDecimal 123.46
      

  2.   

    感谢邀请,下面是我自己用的保留有效小数位的方法(同时四舍五入):/**
     * @brief 截取指定小数位的值
     *
     * @param  price  目标数据
     * @param  position  有效小数位
     *
     * @return 截取后数据
     */
    + (NSString *)notRounding:(float)price afterPoint:(NSInteger)position
    {
        NSDecimalNumberHandler* roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:position raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
        NSDecimalNumber *ouncesDecimal;
        NSDecimalNumber *roundedOunces;
        
        ouncesDecimal = [[NSDecimalNumber alloc] initWithFloat:price];
        roundedOunces = [ouncesDecimal decimalNumberByRoundingAccordingToBehavior:roundingBehavior];
        [ouncesDecimal release];
        return [NSString stringWithFormat:@"%@",roundedOunces];
    }
      

  3.   

    如果不想四舍五入直接截取的话就把 NSRoundPlain改为NSRoundDown即可。
      

  4.   

    谢谢。但我想要返回值是Decimal或DecimalNumber而不是string,难道要再转换一遍?
      

  5.   

    谢谢。但我想要返回值是Decimal或DecimalNumber而不是string,难道要再转换一遍?
    不用,把方法返回类型改为NSDecimalNumber,并 return [roundedOunces autorelease];就可以了,如果用ARC则无视release