iOS NSDecimalNumber 货币计算 四舍五入

转载 2015年11月20日 15:25:33

今天遇到一个问题 服务器返回货币数据 妈的 用string 》 floatvalue   不准确

去百度查查 妈的国人分享精神真差  真他妈的自私 一个破壁文章没几个字 还是从国外翻译过来的 全他妈转发 很不详细

弄明白就不能 再出一个完整点的 都是从菜鸟过来的 尼玛

今天去国外查完 分享下 

//貌似 格式化的帮手 妈的 我英语高考61分 我咋知道它叫啥

NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler

                                       decimalNumberHandlerWithRoundingMode:NSRoundBankers

                                       scale:2

                                       raiseOnExactness:NO

                                       raiseOnOverflow:NO

                                       raiseOnUnderflow:NO

                                       raiseOnDivideByZero:YES];

枚举

    NSRoundPlain,   // Round up on a tie //貌似取整 翻译出来是个圆 吗的垃圾百度翻译

    NSRoundDown,    // Always down == truncate  //只舍不入

    NSRoundUp,      // Always up    // 只入不舍

    NSRoundBankers  // on a tie round so last digit is even  貌似四舍五入

    

    //90.7049+0.22 然后四舍五入

    NSDecimalNumber *subtotal = [NSDecimalNumberdecimalNumberWithString:@"90.7049"];

    NSDecimalNumber *discount = [NSDecimalNumberdecimalNumberWithString:@"0.22"];

    

    NSDecimalNumber *total = [subtotal decimalNumberByAdding:discount withBehavior:roundUp];

    NSLog(@"Rounded total: %@", total);

    

//另一个方法  不准 推荐不用 国内网站一个煞笔 告诉我们的

    NSLog(@"%f", round([[NSStringstringWithFormat:@"%f",12345.6749] floatValue]*100)/100);

 

NSDecimalNumber 其他用法

所有NSDecimalNumber对象是不可变的,这意味着已经被创建后不能改变它们的值。

NSDecimalNumber*price;

price = [NSDecimalNumberdecimalNumberWithMantissa:1599

                                          exponent:-2   //10的-2次方

                                          isNegative:NO];

等效

price = [NSDecimalNumberdecimalNumberWithString:@"15.99"];

 

 

NSDecimalNumber*price1 = [NSDecimalNumberdecimalNumberWithString:@"15.99"];

NSDecimalNumber*price2 = [NSDecimalNumberdecimalNumberWithString:@"29.99"];

NSDecimalNumber*coupon = [NSDecimalNumberdecimalNumberWithString:@"5.00"];

NSDecimalNumber*discount = [NSDecimalNumberdecimalNumberWithString:@".90"];

NSDecimalNumber*numProducts = [NSDecimalNumberdecimalNumberWithString:@"2.0"];

 

NSDecimalNumber *subtotal = [price1 decimalNumberByAdding:price2];

NSDecimalNumber *afterCoupon = [subtotal decimalNumberBySubtracting:coupon];

NSDecimalNumber *afterDiscount = [afterCoupon decimalNumberByMultiplyingBy:discount];

NSDecimalNumber *average = [afterDiscount decimalNumberByDividingBy:numProducts];

NSDecimalNumber*averageSquared = [average decimalNumberByRaisingToPower:2];

 

的NSLog(@“小计:%@”,加后);/ / 45.98

 的NSLog(@“优惠券后:%@”,减);/ / 40.98

 的NSLog((@“折后:%@”),9/10);/ / 36.882

 的NSLog(@“每股平均价产品:%@”,平均);/ / 18.441

 的NSLog(@“平均价的平方:%@”,averageSquared);/ / 340.070481

 

//保留小数点后两位

NSDecimalNumberHandler*roundUp = [NSDecimalNumberHandler

                                   decimalNumberHandlerWithRoundingMode:NSRoundUp

                                   scale:2

                                   raiseOnExactness:NO

                                   raiseOnOverflow:NO

                                   raiseOnUnderflow:NO

                                   raiseOnDivideByZero:YES];

 

//9折后 36.882 有余进位结果 36.89

NSDecimalNumber*subtotal = [NSDecimalNumberdecimalNumberWithString:@"40.98"];

NSDecimalNumber*discount = [NSDecimalNumberdecimalNumberWithString:@".90"];

 

NSDecimalNumber*total = [subtotal decimalNumberByMultiplyingBy:discount

                                                   withBehavior:roundUp];

NSLog(@"Rounded total: %@", total);

 

//比较大小

NSDecimalNumber*discount1 = [NSDecimalNumberdecimalNumberWithString:@".85"];

NSDecimalNumber*discount2 = [NSDecimalNumberdecimalNumberWithString:@".9"];

NSComparisonResult result = [discount1 compare:discount2];

if (result ==NSOrderedAscending) {

    NSLog(@"85%% < 90%%小于");

} else if (result == NSOrderedSame) {

    NSLog(@"85%% == 90%%等于");

} elseif (result ==NSOrderedDescending) {

    NSLog(@"85%% > 90%%大于");

}

IOS 关于四舍五入的

如何只舍不入。比如 float price = 0.126,怎么样才能得到0.12? 当然,通过字符串截取的办法肯定也能达到相同的效果。但是就是这么一个简单的问题要通过一些判断和截取才能获得结果...
  • zhengjie19
  • zhengjie19
  • 2015年04月20日 11:18
  • 641

货币价格计算相关的NSDecimalNumber

在iOS开发中,和货币价格计算相关的,需要注意计算精度的问题。即使只是两位小数,也会出现误差。使用float类型运算,是完全不够的。经过一番测试,最后选择使用系统提供的API的NSDecimalNum...
  • itianyi
  • itianyi
  • 2013年04月10日 15:31
  • 703

iOS 浮点型四舍五入精确值问题

在开发过程中总是会碰到字符串类型转换成浮点型进行运算。但是每当float—>String 或 Sting —> float 转换四舍五入时总会碰上一堆精度失准的问题。即使转成double型也无济于事。...
  • yuwuchaio
  • yuwuchaio
  • 2016年02月05日 14:27
  • 6521

iOS精确计算 货币计算

在iOS开发中,和货币价格计算相关的,需要注意计算精度的问题。即使只是两位小数,也会出现误差。使用float和double类型运算,是完全不够的。系统提供的API的NSDecimalNumber专门用...
  • u012477117
  • u012477117
  • 2016年03月02日 21:49
  • 1465

iOS开发中高精度数值(货币)计算

对知识的深入,很大程度上取决于需求。最近在做一个P2P金融理财类的APP,其中对数值精度的要求很高,使用浮点型和双精度型表示,不能达到规定的精度要求。于是,从网上搜索相关能使Objective-C表示...
  • TQWei00001
  • TQWei00001
  • 2016年11月18日 17:16
  • 1402

NSDecimalNumber的介绍和使用!

title: NSDecimalNumber的介绍和使用! date: 2016-11-07 15:51:56 categories: 笔记 tags:NSDecimalNumber、计算精度N...
  • yuwuchaio
  • yuwuchaio
  • 2016年11月08日 11:34
  • 3977

Java 四舍五入计算问题

Java  四舍五入计算问题 import java.math.BigDecimal; import java.math.RoundingMode; import java.text.Decimal...
  • u012401711
  • u012401711
  • 2016年03月16日 18:06
  • 806

Java货币计算工具类

Java货币计算工具类这是我们之前项目上用到的货币计算的工具类,今天整理出来,希望对大家有所帮助。 github地址:CurrencyUtils package com.sparrow.utils;i...
  • woshimingxing
  • woshimingxing
  • 2017年01月24日 10:12
  • 611

Swift:一个简单的货币转换器App在iOS10中的分析和完善

这本不算是一个完整的货币转换App,只不过是一个小巧的学习性质的程序.该App覆盖了如下几个知识点: 多国语言的支持 通过网络Api接口读取数据 最后我们来修复一个原来代码中的一个小错误作为完美的收尾...
  • mydo
  • mydo
  • 2016年09月22日 16:04
  • 1339

NSDecimalNumber之加减乘除用法(钱计算规则)

上周接到需求,说手机端的有一些值和PC是不一致的,总会有点误差,同一个网关,网关也没有给PC做特殊处理,那怎么不一样呢,总有一点误差,那肯定是PC或者客户端的计算问题了呗,于是就着手这个问题开始查,原...
  • baidu_31683691
  • baidu_31683691
  • 2016年12月11日 16:11
  • 1077
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS NSDecimalNumber 货币计算 四舍五入
举报原因:
原因补充:

(最多只允许输入30个字)