0.007425-6ren">
gpt4 book ai didi

ruby - 计算有效位数

转载 作者:数据小太阳 更新时间:2023-10-29 08:02:36 25 4
gpt4 key购买 nike

我需要将任何 float 转换为 5 位有效数字格式。它表示前五个非零数字(最后一个数字不四舍五入)。

例子

Float("%.#{5}g" % 0.007425742694) => 0.0074257
Float("%.#{5}g" % 3852.574257425742694) => 3852.6

对我来说,这种方法的问题是 3852.574257425742694 四舍五入为 3852.6,我需要 3852.5。

最佳答案

我知道这些数字是非负数。可以执行以下操作:

代码

def floor_it(f, sig_digits=5)
pow = sprintf("%e", f)[-3..-1].to_i
(f *= 10**(-pow)).floor(sig_digits-1) * 10**(pow)
end

示例

floor_it 0.007425742694        #=> 0.0074257
floor_it 3852.574257425742694 #=> 3852.5

解释

为了

f = 385.74957425742694 
sig_digits = 5

步骤如下。首先用科学计数法表示数字(作为字符串)。参见 Kernel#sprintf .

a = sprintf("%e", f)
#=> "3.857496e+02"

我们希望提取最后两位数。

b = a[-3..-1]
#=> "02"

将其转换为整数。

pow = b.to_i
#=> 2

移动f的小数点,使小数点左边有一位非零数字。

f *= 10**(-pow) 
#=> 3.8574957425742697

使用方法Float#floor以获得所需的数字。

d = f.floor(sig_digits-1)
#=> 3.8574957425742697.floor(4)
#=> 3.8574

最后,将小数点移回初始位置。

d * 10**(pow)
#=> 385.74

关于ruby - 计算有效位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com