この操作は を返す必要がありますが、浮動小数点表現のため、代わりに を2
返します。1
a <- .3
b <- .1
floor((a-b)*10)
私は基本的に、浮動小数点コンピュータの結果ではなく、実際の 10 進数の結果のポイントの後の最初の桁が必要です。この場合a
、b
10 進数は 1 桁しかありませんが、ほとんどの場合はそれ以上になります。例:
0.3-0.1=0.2
だから私は欲しい2
0.5-0.001=0.499
だから私は欲しい4
0.925-0.113=0.812
だから私は欲しい8
0.57-0.11=0.46
だから私は欲しい4
0.12-0.11=0.01
だから私は欲しい0
つまり、丸めではなく切り捨てです。私はこれを使用することを考えました:
floor(floor((a-b)*100)/10)
しかし、それが私にできる最善のことかどうかはわかりません。
更新:実際、機能しません(以下のコメントを参照):
floor(floor((.9-.8)*100)/10) # gives 0 instead of 1
floor(round((.5-.001)*100)/10) # gives 5 instead of 1
更新 2:これは機能すると思います (少なくとも、これまでにリストされているすべてのケースで):
substring(as.character(a-b),first=3,last=3)
提案?