From 5948ab751575f355ea2d0dfd7e7e29c1d15cbc2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Tue, 14 Nov 2023 06:11:13 -0800 Subject: [PATCH] Prevent intersectionRatio from being higher than 1 in IntersectionObserverEntry (#41448) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/41448 This was possible before due to precision problems with `double` (we were seeing values like 1.000000002). This is an easy way to prevent that problem. Changelog: [internal] Reviewed By: rshest Differential Revision: D51230183 fbshipit-source-id: 757ef181fe369d525831faf8a6d907467efc544c --- .../IntersectionObserver/IntersectionObserverEntry.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/react-native/Libraries/IntersectionObserver/IntersectionObserverEntry.js b/packages/react-native/Libraries/IntersectionObserver/IntersectionObserverEntry.js index 043d6674256..23833face66 100644 --- a/packages/react-native/Libraries/IntersectionObserver/IntersectionObserverEntry.js +++ b/packages/react-native/Libraries/IntersectionObserver/IntersectionObserverEntry.js @@ -66,10 +66,12 @@ export default class IntersectionObserverEntry { return 0; } - return ( + const ratio = (intersectionRect.width * intersectionRect.height) / - (boundingClientRect.width * boundingClientRect.height) - ); + (boundingClientRect.width * boundingClientRect.height); + + // Prevent rounding errors from making this value greater than 1. + return Math.min(ratio, 1); } /**