扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Swift是Apple在WWDC2014所发布的一门编程语言,可以用来编写iOS应用程序。在设计Swift时.就有意和Objective-C共存。苹果宣称Swift的特点是:快速、现代、安全、互动,且全面优于Objective-C语言。2015年06月09日,苹果通过WWDC大会上宣布Swift开源。这意味着可以用它来进行开发跨平台的应用。现在已经有人使用Swift来开发服务端程序了。这些看上去都十分美好。但是Swift经历的时间毕竟太短,版本变化太快,甚至于1.0,2.0简直就是2个语言。何况很多公司的项目都是Objective-C进行编写的,要想一下子转成Swift进行开发还是有较大的难度的。所以本课程会以Objective-C为主要语言。在课程技术的时候补充下Swift语言语法。学一门编程语言其实难度不大,难得是需要去学习框架,了解框架,这些都需要花大量的时间。一旦我们学会了UIKit等框架之后用Swift编写App是很容易上手的。希望能帮到你,欧克
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、微信小程序、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了长白免费建站欢迎大家使用!
本文转自: iOS开发:Objective-C精确的货币计算 - ArthurChen - 51CTO技术博客
iOS开发中有时需要我们精度的严格处理,比如关于用户资金的数目处理,比较好的建议是服务端直接返回金额数目为字符串类型,这样客户端就不用担心精度显示了,如果我们需要对服务端返回过来的数据进行操作,比如:服务端两个数字float a = 0.01, int b = 99999999,两数相乘的结果是999999.99,就需要考虑精度的问题了。再比如对 flat a = 123456789.12,int b = 10000,两数相除
在iOS开发中,和货币价格计算相关的,需要注意计算精度的问题。即使只是两位小数,也会出现误差。使用float类型运算,是完全不够的。经过一番测试,最后选择使用系统提供的API的NSDecimalNumber来进行更好的解决。
作为一个对外的库,鉴于版本延续,我们保留对外的flaot的类型,不改变接口,选择进行内部适配。
以下是一些基本的测试,
原始数据
floata =0.01;
intb =99999999;
doublec =0.0;
1:使用浮点运算,
c = a*b;
NSLog(@"%f",c);
NSLog(@"%.2f",c);
使用double类型存储没有触及问题的实质,完全不能解决。
2011-12-30 11:04:00.121 Untitled[2912:207] 1000000.000000
2011-12-30 11:04:00.123 Untitled[2912:207] 1000000.00
2:使用类型转换,提高精度
c = a*(double)b;
NSLog(@"%f",c);
NSLog(@"%.2f",c);
Double运算的精度是提高了,可是浮点数的数值早已经出现了精度的不准确,即使存储空间足够,同样还是不准确的数值。
2011-12-30 11:04:00.123 Untitled[2912:207] 999999.967648
2011-12-30 11:04:00.124 Untitled[2912:207] 999999.97
3:通过和NSString的转换,将计算的原始数据转换为纯粹的double类型的数据,这样的计算精度就可以达到要求了。
NSString*objA = [NSStringstringWithFormat:@"%.2f", a];
NSString*objB = [NSStringstringWithFormat:@"%.2f", (double)b];
c = [objAdoubleValue] * [objBdoubleValue];
NSLog(@"%.2f",c);
计算的结果还是比较准确的,不过需要做格式化输入和格式化输出的处理。同时使用NSString来转换,这样的写法看起来比较奇怪。
2011-12-30 11:04:00.190 Untitled[2912:207] 999999.99
4:个人还是比较喜欢使用系统提供的类型来进行计算。通过NSDecimalNumber提供的计算方式,可以很好的计算出准确的精度的数据,同时不需要使用格式化输出等。
其计算的精度是比较高,这是官方建议的货币计算的API,对乘除等计算都有单独的API接口来提供。
NSString *decimalNumberMutiplyWithString(NSString*multiplierValue,NSString*multiplicandValue)
{
NSDecimalNumber*multiplierNumber = [NSDecimalNumberdecimalNumberWithString:multiplierValue];
NSDecimalNumber*multiplicandNumber = [NSDecimalNumberdecimalNumberWithString:multiplicandValue];
NSDecimalNumber*product = [multiplicandNumberdecimalNumberByMultiplyingBy:multiplierNumber];
return[productstringValue];
}
NSLog(@"%@",decimalNumberMutiplyWithString([NSStringstringWithFormat:@"%f",a], [NSStringstringWithFormat:@"%d",b]));
2011-12-30 11:0 4:00.251 Untitled[2912:207] 999999.99
只是测试,所以接口名大致写写,名字取得比较不那么讲究,希望可以表达清楚。
总的来说,对于货币计算,应该需要注意精度的问题。同时在运算的时候,应该优先选用框架提供的API,否则,就应该使用足够精度的类型运算,同时对自己写的接口进行足够的说明,要求开发者按照规范来使用。
在自己不能保证足够准确的情况下,用适当的说明的要求来规避责任还是可以接受的。至少被人抱怨两句总比出错强。
我最近也在做后端,Python,Ruby,Node 都用了一下,最后选择 NodeJS。
在选择时,Ruby on Rails,Django 第一个出局,因为考虑到 API 应该轻,快。
Python 曾经用过 Flask,考虑过 Bottle。不过两者的 Extensions 的功能都无法需求。
Ruby 的 Sinatra 是最好用的。选择 Sinatra + Mongoid,一个星期可以搞出来(我自己的情况)。
现在选择用 NodeJS 的 ExpressJS + Mongoose 搭配。从 Ruby 转成 Node,主要是因为看上 NodeJS 的性能。Request per Second 的话,NodeJS 7000 左右,ExpressJS 3000 左右,Sinatra 900 左右,Ruby on Rails 300 左右。
我写 JavaScript 都是用 CoffeeScript 写的,所以写起来就像写 Ruby 或 Python 一样,非常 Lisp。
ExpressJS 的开发也是这些框架里面,最活跃的。
掌握技术和管理两方面的吧 技术方面:熟悉掌握Objective-C语言、XCode开发环境、ios UI布局、架构计; 理解面向对象设计的基本原则,熟悉常用的设计模式,有独立分析和解决问题的力; 理解手机客户端软件及服务端开发特点; 管理方面: 理解和分析产品需求,制定合理开发计划; 负责公司IOS端APP的开发和维护; 带领团队解决各种开发上的问题,确保项目按期完成; 提升团队成员整体水平,对产品提出改进意见;
第一步:编程入门课
时间预计:4个星期
推荐看公开课,Udacity也行,网易公开课也行,自己找一个面对对象语言(一般是JAVA, C++, Python)的课。我是在网易公开课看的斯坦福的CS106A,学的JAVA。
如果你纯粹学iOS开发,不推荐看哈佛CS50,CS50是给CS系的学生介绍整个计算机世界的框架,讲的内容比较多,进度比较快,对iOS开发其实有点累赘了。(臣妾有点跟不上啊!!)
计划安排是一天一课,看课程要求的书(至少看完一本)及大部分作业。这一阶段重点不是语法,而是以下3个目标。
目标:
1. 让自己对编程这件事感到适应。
写hello world。
怎么写function, 怎么调用function。
全局变量,局部变量这类基本知识点。
都是基本的东西。看看书,写多两个程序就欧啦。
2. 掌握编程语言的基本要素。
编程语言4个要素:
a. 基本的数据类型:整数,实数,character, string, boolean
b. 基本的运算符号:+-×/++--那啥的
c. 怎样输入输出
d. 怎样控制程序:sequence,selection,loop
3. 了解编程范式
面对过程编程。
面向对象编程。
第二步:上手iOS!
时间预计:2星期
强烈推荐CS193P,老头子讲的超级好!我的很多东西(对象思维啥的)是在这里跟着做练习的时候才真正明白的(好啦,也可能是上一堂课练习做得少的原因)。如果等到9月应该itunes U上会开始教iOS 7了。网易公开课的是2010年iOS 5版的,前10堂课,也行。(iTunes U上有完整的课)
CS193P说有prerequisite,一开始被吓到,事实证明还是可以学下去的。头两节课一头雾水,没关系,把itunes U上的课件下载下来,把所有代码打出来,然后一个个元素对应之前学的语言匹配,再不懂先放着,继续学后边的,过几天打多点代码就懂了。
感觉学5、6堂课,一个星期左右就可以开始进入下一阶段自己做东西了。之后用啥学啥,每堂课都有主题的。速度慢点的同学们,这阶段跟我一样准备两个星期吧!
第三步:开发app!
时间预计:2星期(本人...1个半月,实在不好意思说出口)
这个时间就可长可短啦,还包括美工,交互啥的。坚持要用啥学啥的原则,其实就是知道iOS SDK都有什么组件,每个组件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有个师傅,这个阶段真的是进步神速。
好的!不出意外,你的第一个app就这么新鲜出炉了!从今天开始,成为一个冷艳逼格高尚的iOS开发者吧!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流