Ruby/Rails:如何以科学计数法显示数字?
Posted
技术标签:
【中文标题】Ruby/Rails:如何以科学计数法显示数字?【英文标题】:Ruby/Rails: How can I display a number in scientific notation? 【发布时间】:2015-07-09 03:48:28 【问题描述】:我认为这很容易,但我在任何地方都找不到有关它的任何信息。假设用户输入 123456。我想用科学计数法显示它。所以这将是 1.23456 * 10^5。我认为 ruby 或 rails 会有一个辅助方法,比如 science_notation(123456),但我什么也找不到。这可能吗?
更进一步,如果用户输入科学记数法,如何处理数字?例如,他们输入 1.23456x10^6 - rails 会解析这个并将 123456 存储在数据库中。
我意识到第二部分是一个长镜头。
【问题讨论】:
【参考方案1】:要将数字转换为e
的幂,我们可以使用%
运算符。
说x = 123456
那么
"%e" %x
=> 1.234560e+05
【讨论】:
太棒了!还有一个问题。假设它是 1200000。它将显示为 1.200000e+06。我希望它删除额外的 00000。所以只有 1.2e+06。我可以以某种方式设置精度吗? 要在最后一条评论中回答我自己的问题,您可以执行 "%.1e" % x,这将给出 "1.2e+05"【参考方案2】:要将 Integer、Bignum 或 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
通常在 Integer、Bignum 和 BigDecimal 上使用 .to_f 会转换科学计数法中的数字,如果数字很长(长度 > 15)。
【讨论】:
OP 声明“我想用科学计数法显示。”,而不是“我想用科学计数法显示它,如果数字很长。”即使给出的示例长度也只有 6 位数。使用 .to_f 方法不会回答所提出的问题。以上是关于Ruby/Rails:如何以科学计数法显示数字?的主要内容,如果未能解决你的问题,请参考以下文章
Java导出csv数字如何不以科学计数显示,不能改变原来的值
如何在 Pandas Dataframe Python 中使用科学计数法显示小数字?