【问题标题】:Ruby/Rails: How can I display a number in scientific notation?Ruby/Rails:如何以科学计数法显示数字?
【发布时间】:2015-07-09 03:48:28
【问题描述】:

我认为这很容易,但我在任何地方都找不到有关它的任何信息。假设用户输入 123456。我想用科学计数法显示它。所以这将是 1.23456 * 10^5。我认为 ruby​​ 或 rails 会有一个辅助方法,比如 science_notation(123456),但我什么也找不到。这可能吗?

更进一步,如果用户输入科学记数法,如何处理数字?例如,他们输入 1.23456x10^6 - rails 会解析这个并将 123456 存储在数据库中。

我意识到第二部分是一个长镜头。

【问题讨论】:

    标签: ruby-on-rails ruby scientific-notation


    【解决方案1】:

    要将数字转换为e 的幂,我们可以使用% 运算符。

    x = 123456 那么

    "%e" %x
    => 1.234560e+05
    

    【讨论】:

    • 太棒了!还有一个问题。假设它是 1200000。它将显示为 1.200000e+06。我希望它删除额外的 00000。所以只有 1.2e+06。我可以以某种方式设置精度吗?
    • 要在最后一条评论中回答我自己的问题,您可以执行 "%.1e" % x,这将给出 "1.2e+05"
    【解决方案2】:

    要将 IntegerBignum 或 BigDecimal 转换为科学数字表示法,您可以使用 .to_f 方法。

    这里有一些例子:

    # Generate a long number
    num = BigDecimal.new('123e+100')
    #=> #<BigDecimal:1bca380,'0.123E1003',9(18)> 
    num.to_s
    #=> "123000000000000....
    num.to_f
    #=> 1.23e+102
    
    # Convert BigDecimal to integer
    int = num.to_i
    #=> 123000000000000....
    int.class
    #=> Bignum
    int.to_f
    #=> 1.23e+102
    

    通常在 IntegerBignumBigDecimal 上使用 .to_f 会转换科学计数法中的数字,如果数字很​​长(长度 > 15)。

    【讨论】:

    • OP 声明“我想用科学计数法显示。”,而不是“我想用科学计数法显示它,如果数字很长。”即使给出的示例长度也只有 6 位数。使用 .to_f 方法不会回答所提出的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多