好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ruby 四舍五入

ruby 四舍五入

pi.round


good way

首页 新闻 论坛 问答 博客 招聘 更多 ▼

您还未登录 ! 我的应用 登录 注册

zarknight

永久域名 http://zarknight.javaeye.com

mootools 1.11 中文参考文档(CHM和PDF格式 ... | mootools【一】- 起步篇

2007 - 06 - 11

Ruby中的数字【一】

数字的表达形式
==========================================
可以分无符号和有符号两种:
237     # 无符号(正数)
+237    # 和上面的相同
-237    # 负数

如果一个数字很长,你可以在数字的中间任何地方(不能在两头)加入下划线来标记,使其更容易辨别:
1048576     # 一个简单的数字
1_048_576   # 其值和上面的相同
10_48_57_6  # 还是和上面的相同


也可以以8,10,16进制表示数字:
0b10010110      # 2进制,以0b开头
01234           # 8进制,以0开头
0xdeadbeef      # 16进制,以0x开头

浮点数的表现形式:
3.14          
-0.628
6.02e23         # 6.02乘以10的23次幂
6.626068e-34

Float这个类定义了数字的上下限,不过他们的值是看具体的机器的,在不同的机器上面可能会不一样:
Float::MIN          # 2.2250738585072e-308 (在我的机器上)
Float::MAX          # 1.79769313486232e+308
Float::EPSILON      # 2.22044604925031e-16


数字的一些基本操作符
===============================================
+,-,*,/是最基本的操作符,Ruby中,大部分这些操作符其实是方法,因此,我们可以覆盖它。
做幂预算的符号是**,在老的一些编程语言中会有看到,比如BASIC和FORTRAN。
a = 64**2    # 4096
b = 64**0.5  # 8.0
c = 64**0    # 1
d = 64**-1   # 0.015625

两个整数相除,得到的结果是一个整数(即相除结果的整数部分),如果你想得到的结果是一个浮点数,请保证做除法的两个数中,至少有一个是浮点数:
3 / 3        # 3
5 / 3        # 1
3 / 4        # 0
3.0 / 4      # 0.75
3 / 4.0      # 0.75
3.0 / 4.0    # 0.75

下面的方式可以保证在使用变量做除法运算的时候,得到的结果是浮点数:
z = x.to_f / y
z = Float(x) / y


数字的四舍五入
==================================================
使用round方法:
pi = 3.14159
new_pi = pi.round   # 3

temp = -47.6
temp2 = temp.round  # -48

有时候,我们不是需要一个四舍五入后的整数,而是取小数后某位上的四舍五入,那么,我们可以使用sprintf方法:
pi = 3.1415926535
pi6 = eval(sprintf("%8.6f",pi))  # 3.141593
pi5 = eval(sprintf("%8.5f",pi))  # 3.14159
pi4 = eval(sprintf("%8.4f",pi))  # 3.1416

不过上面的看起来太难看了,这样,我们在Float类中封装一个方法:
class Float

  def roundf(places)
    temp = self.to_s.length
    sprintf("%#{temp}.#{places}f",self).to_f
  end

end

这样,我们就可以如此使用:
pi = 3.1415926535
res = pi.roundf(4)    # 3.1416


浮点数的格式化
========================================================
有三种方式可以用来格式化浮点数:
1.使用printf方法:
x = 345.6789
i = 123
printf("x = %6.2f\n", x)    # x = 345.68
printf("x = %9.2e\n", x)    # x = 3.457e+02
printf("i = %5d\n", i)      # i =   123
printf("i = %05d\n", i)     # i = 00123
printf("i = %-5d\n", i)     # i = 123

2.使用sprintf
str = sprintf("%5.1f",x)    # "345.7"

3.使用%
str = "%5.1f" % x            # "345.7"
str = "%6.2f, %05d" % [x,i]  # "345.68, 00123"

 

mootools 1.11 中文参考文档(CHM和PDF格式 ... | mootools【一】- 起步篇

15:25 浏览 (1384) 评论 (1) 分类: Ruby & Rails 相关推荐

评论

1 楼 ruby-china 2007-10-14   引用

转了几篇文章到www.ruby-china.cn了。
如果有版权问题。请随时联系我。
同时非常感谢你的翻译。

发表评论

表情图标


字体颜色: 标准 深红 红色 橙色 棕色 黄色 绿色 橄榄 青色 蓝色 深蓝 靛蓝 紫色 灰色 白色 黑色  字体大小: 标准 1 (xx-small) 2 (x-small) 3 (small) 4 (medium) 5 (large) 6 (x-large) 7 (xx-large)  对齐: 标准 居左 居中 居右

提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签

您还没有登录,请 登录 后发表评论(快捷键 Alt+S / Ctrl+Enter)

zarknight

浏览: 63156 次 性别: 来自: 上海 详细资料 留言簿 搜索本博客

最近访客 >>更多访客

exquan

qichunren

zhanghai_kevin

mesmes

博客分类 全部博客 (47) Mootools (19) Node.js (0) Android (3) Ruby & Rails (12) Java & its friends (2) Ideal & Reality (8) Flex (0) etc (3)

我的留言簿 >>更多留言 你好。我下了mootools 1.2参考文档之后 在自己的站点上打开为什么左边的导 ...
-- by canyan 飘过,哈哈 路过打酱油
-- by cantellow 对了,想问你个问题,你怎么申请到Google AdSense的啊,我今天整了一上午 ...
-- by cantellow

其他分类 我的收藏 (12) 我的新闻 (3) 我的论坛主题贴 (5) 我的所有论坛贴 (40) 我的精华良好贴 (1)

最近加入圈子 电脑DIY google wave 成都,今夜请将我遗忘 作书译书圈子 Android

存档 2009-03 (4) 2008-07 (1) 2008-05 (2) 更多存档...

评论排行榜


bad way as follows: def f(i,n,flag)     y =  1      n.times  do  |x|       y = y* 10      end      if  flag== 1       (i*y).round/(y* 1.0 )      else      (i*y).floor/(y* 1.0 )     end   end  

查看更多关于ruby 四舍五入的详细内容...

  阅读:66次

上一篇: mysql install

下一篇:mysql 恢复方案