在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ruby数值类: ruby中的Numeric子类有Integer和Float,Integer根据长度可以分为Fixnum(普通整数)和Bignum(大整数),程序中使用的整数大小一般是Fixnum类,即便超过了Fixnum的处理范围,也会自动转化成Bignum处理,所以写程序几乎不必特别去在意这些整数类的差异 Numeric的算术运算 数值之间可以进行加(+),减(-),乘(*),除(/),求余(%),乘幂(**)运算, 但是要注意: Integer + Float #=> Float, Integer + Integer #=> Integer, Float+ Float #=> Float 除法: 数值对象除了 / 与 %之外,还有其他除法可用 e.g. x.divmod(y) // 以数组返回x除以y的商与余数。“商”是“x除以y”的结果往小的方向取最接近的整数;余数则是与y同号的值。余数的结果等于“x%y”。 ans = x.divmod(y) ,反之,x == ans[0]*y + ans[1] x.modulo(y) // 等同于"x%y" x.remainder(y) // 返回x除以y的余数,但余数会与“x”同号 注意: 除以0的时候,Integer类会作为错误处理,但Float类则会返回Infinity(无限大)或NaN(Not a Number)。 Math模块 Math模块的使用,可以明确指定模块的名称(Math.sqrt(2)),也可以通过include Math读取进来(include Math). Math模块提供的方法:正弦函数 sin(x), 余弦函数 cos(x), 正函数 tan(x), 反正弦函数 asin(x), 反余弦函数 acos(x), 反正切函数 atan(x), 指数函数 exp(x), 自然对数 log(x), 常用对数 log10(x), 平方根 sqrt(x) Math模块提供的常数:圆周率(3.1415926...) PI, 自然对数的底 e(2.7182818...) E
数值类型的转换 e.g. IntegerObject.to_f #=> FloatObject FloatObject.to_i #=> IntegerObject 字符串也可以转换成数值 e.g. "10".to_i #=> 10 "123.2".to_f #=> 123.2 注意:Float#to_i会直接去掉小数点以下的值。 想要四舍五入,应该使用round方法 e.g. p 1.2.round #=> 1 , p 1.8.round #=>2, p -1.2.round #=> -1, p -1.8.round #=> -2 另外,还有一律返回比接受者大的最大整数的ceil方法,以及一律返回比接受者小的最大整数的floor方法 Integer类还可以使用位运算:位反转(逻辑非)~、 位元积(逻辑与)&、 位元和(逻辑或)|、 互斥逻辑和(异或运算)^、 位元右位移 >>、 位元左位移 <<【具体的可以查阅相关资料】 注意点:对于Float类型的小数部分处理的时候存在“舍入误差”,如图: 原因是:浮点数的小数部分在计算机内部实现时,是按1/2、1/4、1/8等与2的幂相乘的形式存在的。1/5、1/3等数在二进制中就不能被正确的表现出来。对持有有效位数的很大的十进制数,我们采用bigdecimal程序库,小数也好,整数也好,在处理除法运算时,我们采用了有理数来作为表现形式的Rational程序库,这些程序库文件也是ruby的标准附件之一。 数数 迭代器 1、n.times{|i| puts i} // 重复执行n次,参数 i 的值依次会是0到n-1 2、from.upto(to){|i| puts i} // 从from数到to为止不断相加,如果from大于to则一次也不数 3、from.downto(to){|i| puts i} // 从from数到to为止不断相减,如果from小于to则一次也不数 4、from.step(to, step){|i| puts i} // 从from开始,每次加上step,直到数到to为止。当step为正值且from大于to时,则一次也不数;当step为负值且from小于to时,则一次也不数 e.g. ary = [] 2.step(10, 3){|i| ary << i} p ary #=> [2, 5, 8] 后记:到此,数值类介绍完毕,希望能对大家有点帮助
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论