在这里,我们将给大家分享关于由于Swift缺乏CGFloat的隐式转换而造成的混乱的知识,让您更了解由于此swf不包含actionscript怎么办的本质,同时也会涉及到如何更有效地2.3Swift的
在这里,我们将给大家分享关于由于Swift缺乏CGFloat的隐式转换而造成的混乱的知识,让您更了解由于此swf不包含actionscript怎么办的本质,同时也会涉及到如何更有效地2.3 Swift的(Float)和(Double)浮点类型 [Swift原创教程]、C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换、clob加||隐式转换造成的性能问题、cocoa – 用于CGFloat的floatValue的内容。
本文目录一览:- 由于Swift缺乏CGFloat的隐式转换而造成的混乱(由于此swf不包含actionscript怎么办)
- 2.3 Swift的(Float)和(Double)浮点类型 [Swift原创教程]
- C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换
- clob加||隐式转换造成的性能问题
- cocoa – 用于CGFloat的floatValue
由于Swift缺乏CGFloat的隐式转换而造成的混乱(由于此swf不包含actionscript怎么办)
尝试在返回`CGFloat’的函数中进行算术运算,出现错误:
找不到接受提供的参数的’/’的重载
func kDCControlDegreesToRadians(x : CGFloat) -> CGFloat{ return (M_PI * (x) / 180.0) // error is here. }
其他人看到过这种类型的问题吗?
答案1
小编典典这是一个问题double
,以float
转换。
在64位计算机上,CGFloat
定义为double
并且您将编译它而不会出现问题,因为M_PI
和x
都是双精度。
在32位计算机上,CGFloat
是,float
但M_PI
仍然是两倍。不幸的是,Swift中没有隐式强制转换,因此您必须显式强制转换:
return (CGFloat(M_PI) * (x) / 180.0)
180.0
文字的类型被推断。
在Swift 3中
M_PI
已弃用,请CGFloat.pi
改用:
return (x * .pi / 180.0)
2.3 Swift的(Float)和(Double)浮点类型 [Swift原创教程]
2. 首先定义一个值为1.5的浮点类型变量,通过变量的数值,从而推断变量的类型为浮点类型。
3. 开发语言提供了两种有符号的浮点数类型,Double和Float,Float表示32位浮点数。精度要求不高的话可以使用此类型。
4. 获得指定类型的最大值。
5. 定义一个值为3.5的双精度类型的浮点变量,双精度表示64位浮点数。当你需要存储很大或者很高精度的浮点数时,请使用此类型。
6. 通过加号,可以将浮点变量增加一个数值。
7. 通过减号,可以将浮点变量减少一个数值。
8. 同样可以使用乘号以及除以符号,进行浮点数值的计算。
9. 将变量的值加上2,然后再乘以4。
10. 将变量的值乘以1.1。
11. 获得变量的值和16的差值。
12. 定义另一个浮点类型的变量。
13. 获得浮点数值的有效位数。
14. 获得浮点数值的指数。
15. 获得和24.0具有相同符号和指数的浮点数值,且有效位数为1。
16. 获得数值的编码的位模式。
17. 查看当前浮点数值转换为字符串后的值。
18. 检查当前的浮点数值是否为有限数值。
19. 检查当前的浮点数值是否为无限数值。
20. 检查当前的浮点数值是否小于6.0。
21. 检查当前的浮点数值是否小于或等于6.0。
22. 检查当前的浮点数值是否为非数字。
23. 检查当前的浮点数值是否为零。
24. 获得当前浮点数的值大小。
25. 获得当前浮点数的负值(相反数)。
26. 再次获得当前浮点数的负值。
27. 将浮点数值转换为整型数值,并舍入到小于或等于源数值的最接近的允许值。
28. 使用相同的方式,将浮点数值的负值进行类型的转换,并观察右侧的结果。
29. 将浮点数值转换为整型数值,并舍入到大于或等于源数值的最接近的允许值。
30. 将浮点数值转换为整型数值,并舍入到幅度大于或等于源数值的允许值,即向远离0的方向舍入。
31. 将浮点数值转换为整型数值,并舍入到幅度小于或等于源数值的允许值,即向靠近0的方向舍入。
32. 将浮点数值转换为整型数值,并舍入到最接近的允许值; 如果两个值同样接近,则选择具有较大幅度的值。
33. 将浮点数值转换为整型数值,并舍入到最接近的允许值; 如果两个值相同,则选择偶数。
34. 以截取的方式,获得浮点数值除以指定值的余数。
35. 最后获得浮点数值除以指定值的余数。
C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换
区别:
- 隐式转换失败编译会报错。
- 显示转换有可能精度丢失。
- 根据项目的编译设置,显示转换溢出可能会报错,如果设置溢出且未使用checked检查,运行时如果发生溢出会产出未知的计算结果。
- 在数字运算时,会有默认的隐式转换
一、隐式转换
val1 = val2; // 写法简单。即 一个变量val2 赋给 另一个变量val1
从小范围到大范围。如 byte的取值范围是 0 ~ 255, short的范围是 0~32677 所以 byte类型的变量 a 可以赋给 short类型的变量b。
反之 short 类型的赋给 byte 编译会报错。如果非要转的话 就用到 显式转换(强制转换)。
二、显式转换
格式:
1.类型 valA = (类型2) valB;
2.类型 valA = Convert.To类型2(valB);
1) 强制转换会有精度丢失的问题。
如
short shortNum = 281;
byte byteVal = (byte)shortNum;// byte 会赋值 25
// 因为 281 = 1,0001,1001
// 25 = 0,0001,1001
// 255 = 0,1111,1111
// 即 255最多取 8位,从第9位开始就舍弃了。
2)用 checked关键字 检测是否溢出。
如
short shortNum = 281;
byte byteVal = checked((byte) shortNum); // 运行到该行会报错。"Arithmetic operation resulted in an overflow."
unchecked关键字 表示忽略溢出检查,和 checked写法类似。
3)
System.Convert.ToXXX(val); // 转换基本类型,都会执行溢出检测(即效果类似默认都加了 checked 判断)。
三、运算时的默认隐式转换
如 两个 short 相乘的结果 很大概率超过 short 上限,所以返回的结果是 int 类型的。
doubleRe = floatVal + (shortVal * floatVal);
混合运算时,根据运算优先级
1)计算 * ,将 shortVal 转换成 float 类型
2)计算 + ,float 和 float 相加不会类型转换。
3)= 时,将结果转换为 double。
查看变量类型可以用 val.GetType() 函数。
clob加||隐式转换造成的性能问题
CLOB在隐式类型转换的时候,会消耗这么多的current mode read和 consistent read(同时也会引起db block change,db block gets 的飙升),也就是CPU飙升。 SQL drop table t_clob; SQL create table t_clob(id number,cb clob); SQL insert into t_clob values
CLOB在隐式类型转换的时候,会消耗这么多的current mode read和 consistent read(同时也会引起db block change,db block gets 的飙升),也就是CPU飙升。
sql> drop table t_clob;
SQL> create table t_clob(id number,cb clob);SQL> insert into t_clob values(1,''3,4,5,6,77,88,99,10,222'');
SQL> begin
for i in 1 .. 1000 loop
insert into t_clob values(i,''3,4,99,71,18,91,89,''||i);
end loop;
commit;
end;
/
SQL> set autotrace traceonly
SQL> alter session set events ''10046 trace name context forever ,level 12'';
SQL> select *
from t_clob
where cb like '',4,''
or cb like '',16''
or cb like '',91'';
已用时间: 00: 00: 00.23
执行计划
----------------------------------------------------------
Plan hash value: 3459655851
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2015 | 39 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T_CLOB | 1 | 2015 | 39 (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("CB" LIKE '',4,'' OR "CB" LIKE '',16'' OR "CB" LIKE '',91'')
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
820 recursive calls
0 db block gets
175 consistent gets
7 physical reads
0 redo size
416 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
13 sorts (memory)
0 sorts (disk)
0 rows processed
SQL> select *
from t_clob
where '','' || cb like '',4''
or '','' || cb like '',16''
or '','' || cb like '',91'';
未选定行
已用时间: 00: 00: 00.50
执行计划
----------------------------------------------------------
Plan hash value: 3459655851
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2015 | 39 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| T_CLOB | 1 | 2015 | 39 (0)| 00:00:01 |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter('',''||"CB" LIKE '',4'' OR '',''||"CB" LIKE '',16'' OR '',''||"CB"
LIKE '',91'')
Note
-----
- dynamic sampling used for this statement
统计信息
----------------------------------------------------------
5 recursive calls
84084 db block gets
18057 consistent gets
0 physical reads
0 redo size
416 bytes sent via SQL*Net to client
385 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
SQL> alter session set events ''10046 trace name context off'';
会话已更改。
已用时间: 00: 00: 00.00
SQL> set autotrace off
10046 trace的结果:
select *
from t_clob
where cb like '',4,''
or cb like '',16''
or cb like '',91''
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.01 0.00 0 7 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.01 0.01 0 16 0 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.03 0.01 0 23 0 0
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61
Rows Row Source Operation
------- ---------------------------------------------------
0 TABLE ACCESS FULL T_CLOB (cr=16 pr=0 pw=0 time=12823 us)
select *
from t_clob
where '','' || cb like '',4''
or '','' || cb like '',16''
or '','' || cb like '',91''
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.03 0 7 15 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.21 0.20 0 9025 42027 0
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.21 0.24 0 9032 42042 0
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 61
Rows Row Source Operation
------- ---------------------------------------------------
0 TABLE ACCESS FULL T_CLOB (cr=9025 pr=0 pw=0 time=207946 us)
cocoa – 用于CGFloat的floatValue
CGFloat testing = [mainSlider floatValue];
但是,当我尝试记录它时,这只会使测试变量为“0.00”.
NSLog(@"%f",testing);
有没有人有任何想法为什么会发生这种情况?谢谢你的帮助.
解决方法
>试试这个以防万一(不记得CGFloat是否为双倍):
NSLog(@“%f”,(双)测试);
>检查变量是否像这样被遮蔽:
CGFloat testing = 0.0; if(YES){ CGFloat testing = [mainSlider floatValue]; //should be: testing = [mainSlider floatValue]; } NSLog(@"testing = %f",testing); //this will print "testing = 0.000000"
我们今天的关于由于Swift缺乏CGFloat的隐式转换而造成的混乱和由于此swf不包含actionscript怎么办的分享就到这里,谢谢您的阅读,如果想了解更多关于2.3 Swift的(Float)和(Double)浮点类型 [Swift原创教程]、C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换、clob加||隐式转换造成的性能问题、cocoa – 用于CGFloat的floatValue的相关信息,可以在本站进行搜索。
本文标签: