{"record":{"id":"f527440fe57b2cff","repo":"TheAlgorithms/JavaScript","slug":"expected-a-valid-real-number","errorCode":null,"errorMessage":"Expected a valid real number","messagePattern":"Expected a valid real number","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"Maths/IsDivisible.js","lineNumber":5,"sourceCode":"// Checks if a number is divisible by another number.\n\nexport const isDivisible = (num1, num2) => {\n  if (!Number.isFinite(num1) || !Number.isFinite(num2)) {\n    throw new TypeError('Expected a valid real number')\n  }\n  if (num2 === 0) {\n    return false\n  }\n  return num1 % num2 === 0\n}\n\n// isDivisible(10, 5) // returns true\n// isDivisible(123498175, 5) // returns true\n// isDivisible(99, 5) // returns false\n","sourceCodeStart":1,"sourceCodeEnd":16,"githubUrl":"https://github.com/TheAlgorithms/JavaScript/blob/5c39e87a9a31f279c60f830ad74a845e4788a517/Maths/IsDivisible.js#L1-L16","documentation":"The isDivisible function checks whether num1 is evenly divisible by num2. The guard rejects NaN, Infinity, and -Infinity for either argument using Number.isFinite, since divisibility is only defined for finite real numbers. Notably, division by zero returns false rather than throwing an error.","triggerScenarios":"Calling isDivisible(NaN, 5), isDivisible(10, Infinity), or passing undefined/null (Number.isFinite returns false for both). Results of parseFloat on unparseable strings also trigger it.","commonSituations":"Passing results of parseFloat on bad input, unchecked arithmetic that produced Infinity, values from JSON that were null, or undefined from missing object properties.","solutions":["Validate both numbers are finite (Number.isFinite) before calling.","Sanitize parsed input that might be NaN before invoking.","Coerce or reject null/undefined values upstream."],"exampleFix":"// before\nisDivisible(parseFloat(str), 5)\n// after\nconst n = Number(str)\nif (!Number.isFinite(n)) return false\nisDivisible(n, 5)","handlingStrategy":"validation","validationCode":"if (!Number.isFinite(num1) || !Number.isFinite(num2)) {\n  return false\n}\nisDivisible(num1, num2)","typeGuard":"const isFiniteNumber = (n) => typeof n === 'number' && Number.isFinite(n)","tryCatchPattern":null,"preventionTips":["Check Number.isFinite before divisibility tests to catch NaN and Infinity.","Sanitize parseFloat results for NaN before passing to arithmetic functions.","Coerce or reject null/undefined values at data entry points."],"tags":["math","input-validation","type-guard","number-theory"],"backgroundTag":null,"analyzedSha":"5c39e87a9a31f279c60f830ad74a845e4788a517","analyzedAt":"2026-08-13T04:54:54.474Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}