Redondeo a un número arbitrario de dígitos significativos

¿Cómo se puede redondear cualquier número (no solo enteros> 0) a N dígitos significativos? Por ejemplo, si quiero redondear a tres dígitos significativos, estoy buscando una fórmula que pueda tomar: 1,239,451 y retorno 1,240,000 12.1257 y regreso 12.1 .0681 y devuelve .0681 5 y devuelve...