PHP's fmod in TypeScript

✓ Verified: PHP 8.3
Examples tested against actual runtime. CI re-verifies continuously. Only documented examples are tested.

How to use

Install via yarn add locutus and import: import { fmod } from 'locutus/php/math/fmod'.

Or with CommonJS: const { fmod } = require('locutus/php/math/fmod')

Use a bundler that supports tree-shaking so you only ship the functions you actually use. Vite, webpack, Rollup, and Parcel all handle this. For server-side use this is less of a concern.

Examples

These examples are extracted from test cases that automatically verify our functions against their native counterparts.

#codeexpected result
1fmod(5.7, 1.3)0.5
2fmod(10, 1)0

Here's what our current TypeScript equivalent to PHP's fmod looks like.

export function fmod(x: number | string, y: number | string): number {
// discuss at: https://locutus.io/php/fmod/
// parity verified: PHP 8.3
// original by: Onno Marsman (https://twitter.com/onnomarsman)
// input by: Brett Zamir (https://brett-zamir.me)
// bugfixed by: Kevin van Zonneveld (https://kvz.io)
// bugfixed by: Irina (https://github.com/dekairi)
// example 1: fmod(5.7, 1.3)
// returns 1: 0.5
// example 2: fmod(10, 1)
// returns 2: 0

let tmp: RegExpMatchArray | null
let tmp2
let p = 0
let pY = 0
let l = 0.0
let l2 = 0.0
const normalizedX = Number(x)
const normalizedY = Number(y)

tmp = normalizedX.toExponential().match(/^.\.?(.*)e(.+)$/)
if (!tmp) {
return NaN
}
p = Number.parseInt(tmp[2] ?? '0', 10) - (tmp[1] ?? '').length
tmp = normalizedY.toExponential().match(/^.\.?(.*)e(.+)$/)
if (!tmp) {
return NaN
}
pY = Number.parseInt(tmp[2] ?? '0', 10) - (tmp[1] ?? '').length

if (pY > p) {
p = pY
}

tmp2 = normalizedX % normalizedY

if (p < -100 || p > 20) {
// toFixed will give an out of bound error so we fix it like this:
l = Math.round(Math.log(tmp2) / Math.log(10))
l2 = Math.pow(10, l)

return Number((tmp2 / l2).toFixed(l - p)) * l2
} else {
return parseFloat(tmp2.toFixed(Math.abs(p)))
}
}

Improve this function

Locutus is a community effort following The McDonald's Theory: we ship first iterations, hoping others will improve them. If you see something that could be better, we'd love your contribution.

View on GitHub · Edit on GitHub · View Raw


« More PHP math functions


Star