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】:

要将 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 方法不会回答所提出的问题。

以上是关于Ruby/Rails:如何以科学计数法显示数字?的主要内容,如果未能解决你的问题,请参考以下文章

Java导出csv数字如何不以科学计数显示,不能改变原来的值

如何在 ASCII 表中以科学计数法显示数字?

科学记数法如何批量转换成正常的文本或者数字

如何在 Pandas Dataframe Python 中使用科学计数法显示小数字?

CSV文件保存数字为文本形式后再次打开后数字任然显示为科学计数法的问题?

Excel中科学计数法如何转正常显示