Voici donc la source, vous pourrez constater qu'elle est très proche de celle de la version PHP. Je n'ai pas poussé le vice jusqu'à utiliser la fonction abs() de Kevin.

function intval( mixed_var, base ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: stensi
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: intval('Kevin van Zonneveld');
    // *     returns 1: 0
    // *     example 2: intval(4.2);
    // *     returns 2: 4
    // *     example 3: intval(42, 8);
    // *     returns 3: 42
    // *     example 4: intval('09');
    // *     returns 4: 9
 
    var tmp;
 
    var type = typeof( mixed_var );
 
    if(type == 'boolean'){
        if (mixed_var == true) {
            return 1;
        } else {
            return 0;
        }
    } else if(type == 'string'){
        tmp = parseInt(mixed_var * 1);
        if(isNaN(tmp) || !isFinite(tmp)){
            return 0;
        } else{
            return tmp.toString(base || 10);
        }
    } else if(type == 'number' && isFinite(mixed_var) ){
        return Math.floor(mixed_var);
    } else{
        return 0;
    }
}
 
function floatval(mixed_var) {
    // +   original by: Michael White (http://getsprink.com)
    // %        note 1: The native parseFloat() method of JavaScript returns NaN when it encounters a string before an int or float value.
    // *     example 1: floatval('150.03_page-section');
    // *     returns 1: 150.03
    // *     example 2: floatval('page: 3');
    // *     returns 2: 0
    // *     example 2: floatval('-50 + 8');
    // *     returns 2: -50
 
    return (parseFloat(mixed_var) || 0);
}
 
/**
 * Arrondit à la précision supérieure
 * @param float value Valeur à arrondir
 * @param float precision Précision (défaut: 1)
 * @return float
 */
function ceilp(value, precision) {
	precision = Math.abs(intval(precision));
	value = floatval(value);
	if (precision==1)||(precision==0)) {
		value = ceil(value);
	} else {
		value ceil(value/precision)*precision;
	}
	return value;
}
 
/**
 * Arrondit à la précision inférieure
 * @param float value Valeur à arrondir
 * @param float precision Précision (défaut: 1)
 * @return float
 */
function floorp(value, precision) {
	precision = Math.abs(intval(precision));
	value = floatval(value);
	if ((precision==1)||(precision==0)) {
		value = floor(value);
	} else {
		value floor(value/precision)*precision;
	}
	return value;
}