우리는 단순히 float의 imprecions를 본다고 가정합니다. 즉 0.0126760222489 % 1.0
및 1.0126760222489 % 1.0
을 참조하십시오. 결과가 같아야한다고 생각 하겠지만, IEEE754 부동 소수점/복소수는 완벽한 결과를 보장하지는 않으며 기본적으로 부동 소수점 값을 저장하기 위해 Ruby에서 사용됩니다.
심지어 다소 in the docs
6543.21.modulo(137) #=> 104.21
6543.21.modulo(137.24) #=> 92.9299999999996
두 번째 결과는 작은 오류가있는 것을 볼 수 있습니다을 표시합니다. 눈에 보이는 항상
pry(main)> 6543.21.modulo(137)
=> 104.21000000000004
그것은 반드시 모듈 관련이없는 것, 그리고 :
이
[30] pry(main)> 10.0126760222489 - 0.0
=> 10.0126760222489
[31] pry(main)> 10.0126760222489 - 1.0
=> 9.0126760222489
[32] pry(main)> 10.0126760222489 - 2.0
=> 8.0126760222489
[33] pry(main)> 10.0126760222489 - 3.0
=> 7.0126760222489
[34] pry(main)> 10.0126760222489 - 4.0
=> 6.0126760222489
[35] pry(main)> 10.0126760222489 - 5.0
=> 5.0126760222489
[36] pry(main)> 10.0126760222489 - 6.0
=> 4.0126760222489
[37] pry(main)> 10.0126760222489 - 7.0
=> 3.0126760222489004
표준을 사용하는 소프트웨어의 모든 조각이 필요 수레 사실, 루비 2.3.1에 나는 첫 번째 줄을 실행하고있어 이러한 작은 오류를 설명합니다. 당신이 어떤 이유로 그것을 처리 할 수없는 경우에, 당신은 'BigDecimal를'이 느려질 수 있습니다 것을 명심 bigdecimal
(이미 루비에 포함되어야한다), 고정 소수점, 또는 유사한 숫자 라이브러리
require 'bigdecimal'
BigDecimal('6543.21').modulo(137).to_s
=> "0.10421E3"
BigDecimal('6543.21').modulo(137).to_f
=> 104.21
를 사용할 수 있습니다 더 많은 메모리를 사용할 수 있습니다.
어떻게 길 값을 계산 했습니까? – sokkyoku
데이터베이스에서 오는 것 – Flip
사용중인 Ruby 버전은 무엇입니까? – quetzalcoatl