N[expr] gives the numerical value of expr.
N[expr, n] attempts to give a result with n-digit precision.
Unless numbers in expr are exact, or of sufficiently high precision, N[expr, n] may not be able to give results with n-digit precision.
N[expr, n] may internally do computations to more than n digits of precision.
$MaxExtraPrecision specifies the maximum number of extra digits of precision that will ever be used internally.
The precision n is given in decimal digits; it need not be an integer.
n must lie between $MinPrecision and $MaxPrecision. $MaxPrecision can be set to Infinity.
N[expr] gives a machine-precision number, so long as its magnitude is between $MinMachineNumber and $MaxMachineNumber.
N gives the number 0. with machine precision.
N converts all non-zero numbers to Real or Complex form.
N converts each successive argument of any function it encounters to numerical form, unless the head of the function has an attribute such as NHoldAll.
You can define numerical values of functions using N[f[args]] := value and N[f[args], n] := value.
See The Mathematica Book: Section 1.1.2, Section 1.1.4 and Section 3.1.4.
Implementation Notes: see section A.9.4.
See also: Chop, CompiledFunction, Rationalize, $MachinePrecision, NHoldAll.