今天遇到一个问题 服务器返回货币数据 妈的 用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. Upstart概述引导方法事件驱动的任务和服务

    /*********************************************************************  * Author  : Samson  * Date   ...

  2. android 判断应用程序是否已安装

    1.判断是否安装/** check the app is installed*/private boolean isAppInstalled(Context context,String packag ...

  3. Android保存设置的PreferenceActivity

    界面XML文件:preference_setting.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  4. mybatis01

    mybatis是一个java持久层框架,java中操作关系型 数据库用的是jdbc,mybatis是对jdbc的一个封装. jdk1..0_72 eclipse:eclipse-3.7-indigo ...

  5. 使用 JSSE 定制 SSL 连接的属性--转载

    当数据在网络上传播的时候,通过使用 SSL 对其进行加密和保护,JSSE 为 Java 应用程序提供了安全的通信.在本篇有关该技术的高级研究中,Java 中间件开发人员 Ian Parkinson 深 ...

  6. my_pnd_start

    终于有个雏形了,再给自己一些时间做做看吧.

  7. samba环境搭建

    1.安装samba软件 sudo apt-get install samba cifs-utils samba-common 2.创建与windows共享目录 mkdir share chmod 77 ...

  8. Crawler & Ajax:WebBrowser C#

    Crawler 與 Ajax http://net.zdnet.com.cn/network_security_zone/2007/1005/536329.shtml WebBrowser: 利用We ...

  9. CSS常见问题及兼容性

    CSS常见问题 1 (IE6,7)H5标签兼容 解决方法1:(只显示核心代码) 1<script>  ; ; ;                    ;;;};;;;;;;;       ...

  10. Java SE (2)之 Graphics 画图工具

    Graphics 绘图类: 提供两个方法.Paint (绘图,被系统自动调用)    repaint(重绘) Paint 调用原理(1.窗口最大化,再最小化 窗口的大小发生变化 Repaint函数被调 ...