雄关漫道真如铁,而今迈步从头越分享 http://blog.sciencenet.cn/u/max 专业,是一种追求;执着,是一种品质;从容,是一种境界。

博文

Delphi技术(1)——强制转换及取整函数Trunc

已有 5777 次阅读 2011-8-21 19:45 |个人分类:Delphi技术|系统分类:科研笔记

1 背景:

ANSYSBasic中不分数据类型,感觉有点随心所欲;FortranCDelphi语言未了严谨,恐怕出错,所以必须加以说明数据类型,如Float等类型。但是,如一个数据只能取整,还必须对其进行实数运算,比如对数列的“项”进行实数运算,这就必须数据强制转换。

        VCC中都有强制转换的函数,但是非常遗憾,Pascal语言由于其严谨性,不支持任何形式的仅仅是数据间的类型转换。

2 问题提出:

此时本人编程出现一个问题:

1) 比如一个圆环内半径为R1,外半径为R2,其间装有硅钢片,厚度为t,则可装硅钢片的片数近似为

N=(R2-R1)/t

而此时计算出的N一定是个实数类型。

2) 因为需要对每一片硅钢叠片进行物理特性的处理,所以期望循环N次进行。

3) Delphifor循环仅仅支持“顺序型”变量,不像ANSYS的循环可以任意指定步长。

4) 当然,也可以采用While循环,或者repeat循环。本人认为,for循环最近,好控制,不会出现死循环的一些问题。

待解决:如何用for循环来控制一个实数呢?

3 解决方案:

发现一个函数Trunc:

Tranc (x: Extended): Int64

表示将实数x的小数丢掉,并且“整数化”。简直是太好了,不仅进行了“截断”运算,而且顺便进行了“强制转化”,一举两得。

比如:

R2=92.5    //外半径;

R1=22.5    //内半径;

t=0.2       //硅钢片厚度;

N=(R2-R1)/t   //片数,应该为350

如运行则Tranc(N)=350;而Tranct((R2-R1)/t)=349,二者差“1”。

开始循环:

for I:=1:N

  begin

  核心算法

 ..........

  end;

4 结论:

    Tranc( )不仅可以截断小数,而且返回的值为真正的整数,完成了强制类型的转化,真正的一举两得。



https://blog.sciencenet.cn/blog-469261-478022.html

上一篇:记忆中的流氓学生
下一篇:2011年度国家自然科学基金排行榜 (8.24版本,Ver3.0版)
收藏 IP: 221.6.29.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-22 19:08

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部