diff --git a/packages/scratch-vm/src/blocks/scratch3_operators.js b/packages/scratch-vm/src/blocks/scratch3_operators.js index cb5d6ef84fd..8fc4a7c6158 100644 --- a/packages/scratch-vm/src/blocks/scratch3_operators.js +++ b/packages/scratch-vm/src/blocks/scratch3_operators.js @@ -136,8 +136,8 @@ class Scratch3OperatorsBlocks { case 'floor': return Math.floor(n); case 'ceiling': return Math.ceil(n); case 'sqrt': return Math.sqrt(n); - case 'sin': return parseFloat(Math.sin((Math.PI * n) / 180).toFixed(10)); - case 'cos': return parseFloat(Math.cos((Math.PI * n) / 180).toFixed(10)); + case 'sin': return Math.round(Math.sin((Math.PI * (n % 360)) / 180) * 1e10) / 1e10; + case 'cos': return Math.round(Math.cos((Math.PI * (n % 360)) / 180) * 1e10) / 1e10; case 'tan': return MathUtil.tan(n); case 'asin': return (Math.asin(n) * 180) / Math.PI; case 'acos': return (Math.acos(n) * 180) / Math.PI; diff --git a/packages/scratch-vm/src/util/cast.js b/packages/scratch-vm/src/util/cast.js index af624a30fa0..8c9a93164f7 100644 --- a/packages/scratch-vm/src/util/cast.js +++ b/packages/scratch-vm/src/util/cast.js @@ -161,7 +161,7 @@ class Cast { return true; } // True if it's "round" (e.g., 2.0 and 2). - return val === parseInt(val, 10); + return val % 1 === 0; } else if (typeof val === 'boolean') { // `True` and `false` always represent integer after Scratch cast. return true; diff --git a/packages/scratch-vm/src/util/math-util.js b/packages/scratch-vm/src/util/math-util.js index f9a1a75ec93..1b23cb6b7d9 100644 --- a/packages/scratch-vm/src/util/math-util.js +++ b/packages/scratch-vm/src/util/math-util.js @@ -60,7 +60,7 @@ class MathUtil { case 270: return -Infinity; default: - return parseFloat(Math.tan((Math.PI * angle) / 180).toFixed(10)); + return Math.round(Math.tan((Math.PI * angle) / 180) * 1e10) / 1e10; } }