浮動小数点をループする必要がありますが、正しい構文が見つかりません。スケッチプラグインのフローティングループ
(-1.0).upto(1.0).step(0.1) do |t|
...
end
私は次のエラーを取得する:
Error: #NoMethodError: undefined method `upto' for -1.0:Float>
EDIT:このループを行うには、 "良い" またはより良い方法はありますか?私が試した何
浮動小数点をループする必要がありますが、正しい構文が見つかりません。スケッチプラグインのフローティングループ
(-1.0).upto(1.0).step(0.1) do |t|
...
end
私は次のエラーを取得する:
Error: #NoMethodError: undefined method `upto' for -1.0:Float>
EDIT:このループを行うには、 "良い" またはより良い方法はありますか?私が試した何
一つの選択肢はRange
上のステップを使用することで、独自の同様の方法で作成することができます。
(-1.0..1.0).step(0.1) { |i|
puts i
}
0.1をインクリメントしている間は浮動小数点t精度の問題です。だからそれを考慮に入れてください。
-1.0
-0.9
-0.8
-0.7
-0.6
-0.5
-0.39999999999999997
-0.29999999999999993
-0.19999999999999996
-0.09999999999999995
5.551115123125783e-17
0.10000000000000006
0.20000000000000007
0.30000000000000004
0.4000000000000001
0.5000000000000001
0.6000000000000001
0.7000000000000001
0.8
0.9000000000000001
1.0
は、フロートには#upto
方法はありませんが、あなたは
class Float
def upto(target, options={})
options = {step: 1.0}.merge(options)
current_value = self
while current_value < target
yield current_value
current_value += options[:step]
end
end
end
ます。次に行うことができます...
(-1.0).upto(1.0, step: 0.1) do |t|
...
end
質問は、彼が拡張子を生産だ示し、SketchUpのの文脈にあるので、SketchUpの拡張倉庫にホストされている拡張機能は衝突を避けるために、RubyのAPIの名前空間を変更することが許可されていないことは注目に値します。代わりに、floatを引数として取らなければなりません。 – thomthom
(あなたは、フローティングポイントを丸める必要があります除く)それは全然良いアイデアではありませんが、これは動作します: '(-1.0..1.0)。ステップ(0.1).to_a.each {| E | e} ' – yzalavin
@yzalavinなぜそれはいいアイデアではないのですか?それを行う "良い"方法はありますか? – sinsedrix
downvoteはその理由を説明してもよいですか? – sinsedrix