今天遇到一个问题 服务器返回货币数据 妈的 用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 NSDecimalNumber 货币计算 四舍五入的更多相关文章

  1. 世界各国货币,C#数字货币计算

    货币 CCY(Currency)本质上是一种所有者与市场关于交换权的契约,根本上是所有者相互之间的约定.吾以吾之所有予市场,换吾之所需,货币就是这一过程的约定,它反映的是个体与社会的经济协作关系.货币 ...

  2. iOS NSDecimalNumber 使用

    在iOS开发中,经常遇到和货币价格计算相关的,这时就需要注意计算精度的问题.使用float类型运算,经常出现误差.为了解决这种问题我们使用NSDecimalNumber,下面将通过例子的形式给大家展示 ...

  3. iOS依据字符串计算UITextView高度

    iOS计算字符串高度,有须要的朋友能够參考下. 方法一:ios7.0之前适用 /** @method 获取指定宽度width,字体大小fontSize,字符串value的高度 @param value ...

  4. iOS中动态计算不同颜色、字体的文字高度

    在改项目bug的时候,有一个问题动态计算label的高度,前开发者竟然用字符串长度除以14.16这样的常量来计算是否换行,结果cell的高度问题非常严重. 因为label内容里有部分关键字是要另一种颜 ...

  5. IOS中货币高精度要求使用NSDecialNumber、

    float a = 0.01;        int b =99999999;        double c = 0.0;        c = a * b; //如果单纯的使用double会导致数 ...

  6. 李洪强iOS开发之计算数组的最大最小值

    // //  ViewController.m //  A21 - 李洪强 - 输出参数 // //  Created by vic fan on 16/7/3. //  Copyright © 20 ...

  7. iOS开发之计算动态cell的高度并缓存

    项目中有个类似微博那样的动态cell,文字和图片的多少都不是确定的 刚开始使用autolayout,结果很多问题,最后我发现了一个框架 FDTemplateLayoutCell 写的很好,自动布局ce ...

  8. iOS开发之计算文字尺寸

    /** *  计算文字尺寸 * *  @param text    需要计算尺寸的文字 *  @param font    文字的字体 *  @param maxSize 文字的最大尺寸 */ - ( ...

  9. iOS 百度地图计算两个点时间的距离

    最近在解项目bug,更新地位城市的时候有个错误,后来想在位置改变多少距离之后,再取更新位置,这个功能去年做过.但是又忘记了! 所以还是记录一下吧. 百度地图提供了一个方法: BMKMapPointFo ...

随机推荐

  1. 在VS Nuget命令行下进行EF数据库迁移

    找到项目中,用到数据库DLL的地方,然后选中该项目,打开Nuget命令行输入以下的命令: 其中cardId为迁移名称,自己取

  2. 开源免费天气预报接口API以及全国全部地区代码!!(国家气象局提供)

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  3. HttpServlet请求重定向

    方法一: public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...

  4. GUI编程笔记(java)03:GUI的组件继承图

    1.组件继承图: 2.分析上面的组件继承图 (1)Component:public abstract class Component extends Object implements ImageOb ...

  5. HDU 4196 Remoteland

    题意:给定一个n,然后让你从1-n中选出某些数乘起来,使得乘积最大,并且乘积必须是完全平方数. 思路:将1-n种每个数都分解素因子,把他们的素因子的幂加起来,如果是偶数,就说明可以构成完全平方数,乘起 ...

  6. node express

    在某QQ群里,发现大家都在搞node,为了不被out,这周主要研究了一下,还挺高大上. 参考了下资料,适合初学者学习. Node和NPM的安装够便捷了,不细说...有几点基础顺手提一下: 安装命令中的 ...

  7. js--小结②

  8. Java-struts2 之值栈问题

    这里是根据一个小项目,将数据库的值查出来,然后在页面前台进行遍历的方法 放入值的几种方式: Struts2的三种存值取值的方式 值栈: 栈上下文: ActionContext: package com ...

  9. [功能帮助类] 最新的Functions 类 (转载)

    代码 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptogr ...

  10. 避免 TCP/IP 端口耗尽

    转载:http://www.cnblogs.com/tianzhiliang/archive/2011/06/27/2091214.html 当客户端启动到服务器的 TCP/IP 套接字连接时,客户端 ...