GVKun编程网logo

由于Swift缺乏CGFloat的隐式转换而造成的混乱(由于此swf不包含actionscript怎么办)

11

在这里,我们将给大家分享关于由于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怎么办)

由于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_PIx都是双精度。

在32位计算机上,CGFloat是,floatM_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.3 Swift的(Float)和(Double)浮点类型 [Swift原创教程]

1. 本节课将为你演示浮点数据类型。浮点数是有小数部分的数字,如3.14。浮点类型比整数类型表示的范围更大,可以存储比整型更大或者更小的数字。


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. 最后获得浮点数值除以指定值的余数。
本文整理自:《Swift4互动教程》,真正的 [手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载: https://itunes.apple.com/cn/app/id1320746678 ,或扫描本页底部的二维码。课程配套素材下载地址: 资料下载

C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换

C# 中的隐式类型转换(运算时的隐式转换)和显示类型转换

区别:

  1. 隐式转换失败编译会报错。
  2. 显示转换有可能精度丢失。
  3. 根据项目的编译设置,显示转换溢出可能会报错,如果设置溢出且未使用checked检查,运行时如果发生溢出会产出未知的计算结果。
  4. 在数字运算时,会有默认的隐式转换

一、隐式转换
  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加||隐式转换造成的性能问题

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

cocoa – 用于CGFloat的floatValue

我有一个NSSlider试图将常规浮点数转换为CGFloat.我正在使用的代码:

CGFloat testing = [mainSlider floatValue];

但是,当我尝试记录它时,这只会使测试变量为“0.00”.

NSLog(@"%f",testing);

有没有人有任何想法为什么会发生这种情况?谢谢你的帮助.

解决方法

>检查mainSlider是否为零
>试试这个以防万一(不记得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的相关信息,可以在本站进行搜索。

本文标签: