ruby 四舍五入

  • pi.round



  • good way
  • 数字的表达形式
    ==========================================
    可以分无符号和有符号两种:
    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"

     

    评论
    1 楼 ruby-china 2007-10-14   引用
    转了几篇文章到www.ruby-china.cn了。
    如果有版权问题。请随时联系我。
    同时非常感谢你的翻译。
    发表评论
    表情图标

    字体颜色:  字体大小:  对齐:
    提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签

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

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

    • 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  
    • 原文地址:https://www.cnblogs.com/lexus/p/1892088.html