gpt4 book ai didi

ruby - float 、小数或整数

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

我有一个处理一些数据的 Rails 应用程序,其中一些数据包括带小数的数字,例如 1.9943,以及这些数字与其他整数之间的除法。我想知道存储它的最佳方式是什么。

我想到将保留整数的数字存储为整数,将可能变成小数的数字存储为小数。虽然它的格式很奇怪,比如

#<BigDecimal:7fda470aa9f0,'0.197757E1',18(18)> 

当我将两个小数或一个小数除以一个整数时,它似乎执行了正确的算术运算。当我尝试用整数除整数时,它无法正常工作。我以为 rails 会自动将结果转换为适当的小数,但它似乎将其保留为整数并去除余数。我能做些什么吗?

存储此类信息的最佳方式是什么?我应该将其全部存储为小数还是 float ?

最佳答案

如果你想在不损失精度的情况下划分两个整数,你需要先将其中一个转换为 FloatBigDecimal:

irb(main):007:0> 2/3
=> 0
irb(main):008:0> Float(2)/3
=> 0.666666666666667

当您说将 Float/Integer 与 Integer/Float 相除时会得到不同的结果时,我有点困惑?这些应该有相同的结果:

irb(main):010:0> Integer(2)/Float(3)
=> 0.666666666666667
irb(main):011:0> Float(2)/Integer(3)
=> 0.666666666666667
irb(main):012:0> String( BigDecimal('2')/3 )
=> "0.666666666666666666666666666666666666666666666666666667E0"
irb(main):013:0> String( 2/BigDecimal('3') )
=> "0.666666666666666666666666666666666666666666666666666667E0"

你能提供一个代码示例吗?

就存储而言,任何整数数据都应存储为 Integer,无论其在未来计算中的预期用途如何。

存储 float 与 BigDecimals 取决于您需要多少精度。如果您不需要太多精度,Float 将提供 double 表示。如果您需要高精度,BigDecimal 将提供任意精度的表示。

相关: Ruby Numbers - 解释 Integers、Floats、BigDecimals 和 Rationals 之间的区别

关于ruby - float 、小数或整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18728921/

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