浮点数计算函数

这一节的所有函数,只有在vim编译时支持了+float时才有效。

三角函数

  • sin() : sine正弦函数
  • cos() : cosine余弦函数
  • tan() : tangent正切函数
  • asin() : arc sine反正弦函数
  • acos() : arc cosine反余弦函数
  • atan() : arc tangent反正切函数
  • atan2({X坐标},{Y坐标}) : arc tangent反正切函数
  • sinh() : hyperbolic sine 双曲正弦函数
  • cosh() : hyperbolic cosine双曲余弦函数
  • tanh() : hyperbolic tangent双曲正切函数

这些函数基本上都是对应的C函数的封装。比如对于双曲正弦不熟悉的话,可以参看man sinh. 如果不理解atan2,可以man atan2.

数学计算

  • abs(): 绝对值
  • fmod(): 浮点余数
  • exp(): e的乘方
  • log(): 自然对数
  • log10(): 以10为底的对数
  • pow(): 阶乘
  • sqrt(): 平方根,如果求负数的平方根,返回NaN.
  • isnan(): 判断是否为NaN。比如isnan(0.0/0.0)为真。

浮点数转整数

  • float2nr() : 将浮点数转成整数。
  • round() : round off, 四舍五入
  • ceil(): round up, 上舍入
  • floor(): round down,下舍入
  • trunc(): 简单截断小数点后面的数

我们来写个函数测试下它们的功能:

function Float2Number(arg)
        echo "Orginal value:"
        echo a:arg
        echo "float2nr:"
        echo float2nr(a:arg)
        echo "round:"
        echo round(a:arg)
        echo "ceil:"
        echo ceil(a:arg)
        echo "floor:"
        echo floor(a:arg)
        echo "trunc:"
        echo trunc(a:arg)
endfunction

我们先试试2.06:

Orginal value:
2.06
float2nr:
2
round:
2.0
ceil:
3.0
floor:
2.0
trunc:
2.0

我们再试试122.667:

Orginal value:
122.667
float2nr:
122
round:
123.0
ceil:
123.0
floor:
122.0
trunc:
122.0

我们再看一个负数:-9.08

Orginal value:
-9.08
float2nr:
-9
round:
-9.0
ceil:
-9.0
floor:
-10.0
trunc:
-9.0

最后来一个五入的负数:

Orginal value:
-65.96
float2nr:
-65
round:
-66.0
ceil:
-65.0
floor:
-66.0
trunc:
-65.0

我们总结一下:

* 除了float2nr,其它所有截断的结果还是浮点数

* float2nr的策略跟trunc一致,也就是说,如果要想四舍五入的话,先做round再float2nr.

* round是四舍五入,不管正负,都是四舍五入。

* ceil取大于等于它的最小整数。

* floor取小于等于它的最大整数。

* trunc就是简单去掉小数部分。

Vim技能修炼教程(16) - 浮点数计算函数的更多相关文章

  1. Vim技能修炼教程(2) - 语法高亮速成

    语法高亮速成 我们继续在人间修行Vim技能之旅.上一次我们学习了如何通过vundle安装插件,这次我们迅速向写插件的方向挺进. 我们先学习一个最简单的语法高亮插件的写法. 语法高亮基本上是由三部分组成 ...

  2. Vim技能修炼教程(15) - 时间和日期相关函数

    Vimscript武器库 前面我们走马观花地将Vimscript的大致语法过了一遍.下面我们开始深入看一下Vimscript都给我们准备了哪些武器.如果只用这些武器就够了,那么就太好了,只用Vimsc ...

  3. Vim技能修炼教程(13) - 变量

    VimScript变量 上节我们介绍了Python和Ruby来编写Vim插件的方式. 不过,Python和Ruby并不是所有的Vim都支持的功能,如果以最小依赖的原则来说,还是原汁原味的Vimscri ...

  4. Vim技能修炼教程(10) - 代码跳转

    程序员功能 前面我们用了5讲的篇幅来讲基本编辑的基本功:第4讲是基本操作,第5讲是操作符,第6讲行编辑ex命令,第7讲可视模式,第8讲多窗口,第9讲缓冲区和标签页. 从这一讲开始,我们从通用功能向程序 ...

  5. Vim技能修炼教程(3) - 语法高亮进阶

    语法高亮进阶 首先我们复习一下上节学到的三个命令: * syntax match用于定义正则表达式和规则的对应 * highlight default定义配色方案 * highlight link将正 ...

  6. Vim技能修炼教程(14) - 写个ex命令吧

    写个ex命令吧 我们第二节开始就写了语法高亮的插件.这一节,我们学习第二种插件的写法,就是写个我们自己的ex命令. 自定义ex命令的命令是:command,我们在~/.vim/下建立一个plugin目 ...

  7. Vim技能修炼教程(12) - Vim的脚本语言支持

    Vim的脚本语言支持 本节开始,我们正式接触vimscript这门古老的脚本语言. 首先要说明,vim支持的扩展语言很多,比如python, python3, ruby, lua,tcl等常见脚本语言 ...

  8. Vim技能修炼教程(8) - 多窗口

    多窗口 如果一个vim只能开一个窗口,那肯定是有点low.尤其是写代码的时候,打开多个文件是经常的需求. 速成教程 横着切成两个 :split 文件名 上下切换窗口 Ctrl-W加上上下键,可以实现上 ...

  9. Vim技能修炼教程(1) - 使用vundle管理插件

    世界上有两个伟大的编辑器:一个是emacs,一个是vi.它们从诞生以来,一直在Unix/Linux世界得到最广泛的支持. 尽管过了几十年,在Windows平台上和跨平台上有层出不穷的后起之秀不断挑战它 ...

随机推荐

  1. 20145309《Java程序设计》第八周学习总结

    日志 •java.util.logging包提供了日志功能相关类与接口,使用日志的起点是logger类,Logger类的构造函数标示为protected,不是java.util.logging同包的类 ...

  2. struts2中各个jar包作用 (转)

    Struts2.3.4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方j ...

  3. LVS-net

    一.LVS基本情况 lvs:Linux Virtual Server,是一种负载均衡集群,其主要是由工作在内核的ipvs与用户空间的命令行工具ipvsadm组成.支持TCP,UDP,AH,EST,AH ...

  4. js梳理

    js引用类型 Object Function Array其他皆为基本类型,这和很多高级语言不一样,需要注意!!!! typeof对应基本类型来说更实用---- typeof undefined     ...

  5. 无法读取服务器服务中的服务器队列性能数据。数据段的第一个四字节 (DWORD) 中包

    无法打开服务器服务性能对象.数据段的第一个四字节 (DWORD) 包含状态代码. 解决方法:修改注册表禁用PerfNet性能计数器. 具体方法:打开注册表,在HKEY_LOCAL_MACHINE\SY ...

  6. Spring cloud + boot 问题记录

    1 配置中心更新值的时候,要在有需要更新的属性 类上 加入  @RefreshScope 注解 2 关于Spring Cloud 调用服务     服务名称的问题 spring: applicatio ...

  7. Codeforces Round #358 (Div. 2) C. Alyona and the Tree dfs

    C. Alyona and the Tree time limit per test 1 second memory limit per test 256 megabytes input standa ...

  8. 关于JNDI那点事

    一.JNDI是什么? JNDI--Java 命名和目录接口(Java Naming and Directory Interface),是一组在Java应用中访问命名和目录服务的API. 二.JNDI好 ...

  9. 嵌入式 Web workers

    前言 虽然worker可以将复杂的运算放入单独线程去运算,不阻塞UI线程,但是,由于worker()的构造函数的参数不能读取本地的文件,只能来自网络,所以当在一个项目里想使用本地的模块函数,是一个很麻 ...

  10. Poi中getPhysicalNumberOfCells 与 getLastCellNum的差异

    getPhysicalNumberOfCells 与 getLastCellNum的区别 用org.apache.poi的包做excel导入,无意间发明若是excel文件中有空列,空列后面的数据全部读 ...