Formatação monetária com javascript

Uma formatação muito usada em apresentação de números e a formatação monetária.

Criamos uma função bem simples, para realizar esta representação.

function formatReal( int )
{
var tmp = int+'';
var neg = false;
if(tmp.indexOf("-") == 0){
neg = true;
tmp = tmp.replace("-","");
}

if(tmp.length == 1) tmp = "0"+tmp

tmp = tmp.replace(/([0-9]{2})$/g, ",$1");
if( tmp.length > 6)
tmp = tmp.replace(/([0-9]{3}),([0-9]{2}$)/g, ".$1,$2");

if( tmp.length > 9)
tmp = tmp.replace(/([0-9]{3}).([0-9]{3}),([0-9]{2}$)/g,".$1.$2,$3");

if( tmp.length > 12)
tmp = tmp.replace(/([0-9]{3}).([0-9]{3}).([0-9]{3}),([0-9]{2}$)/g,".$1.$2.$3,$4");

if( tmp.length > 15)
tmp = tmp.replace(/([0-9]{3}).([0-9]{3}).([0-9]{3}).([0-9]{3}),([0-9]{2}$)/g,".$1.$2.$3.$4,$5");

if(tmp.indexOf(".") == 0) tmp = tmp.replace(".","");
if(tmp.indexOf(",") == 0) tmp = tmp.replace(",","0,");

return (neg ? '-'+tmp : tmp);
}

Para testar você pode testar a seguinte chamada:

formatReal(150000000000000) // saida "1.500.000.000.000,00"
formatReal(150000)          // saida "1.500,00"
formatReal(1500000)         // saida "15.000,00"

PostgreSQL – JulianDay para data

Como realizar a conversão do JulianDay para Data?

Primeiramente precisamos sempre do ano que aquele JulianDay é parte, esta requisição de converter é comum, por isso acabei criando uma função com essa finalidade.

A function:

CREATE OR REPLACE FUNCTION juliantodate(integer,integer)
 RETURNS date AS
$BODY$
DECLARE
 julian int := $2;
 ano int := $1;
BEGIN

return ('J'||((to_char(((ano-1)||'-12-31')::date, 'J')::int) + (julian)))::DATE;

END
$BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100;

Para a utilização da mesma, basta chamar a função passando como parâmetro a data que deseja realizar a conversão e o ano que a data faz parte:

SELECT juliantodate(2017,61);

Caso tudo tenha dado certo o exemplo deve ter retornado a data 2017-03-02

PostgreSQL – Arredondar valores

Como realizar o arredondamento de um valor com muitas casas após a virgula utilizando diretamente a base de dados ?

Vamos supor que tenhamos um numero, tal como :

12,5991425

E queremos que o mesmo fique apenas com uma casa decimal após a virgula, para realizar este feito precisar usar a função:

round(valor, numero de casas decimais)

Por exemplo, para conseguimos apenas uma casa basta utilizar:

select round('12,5991425', 1);

O resultado será 12,6

 

PostgreSQL – Data para JulianDay

Mais de uma vez precisei realizar e procurar por uma forma de converter uma data (dd-MM-YYYY) em julianday, após a terceira vez que tive que realizar esse processo criei uma função para esta conversão.

A function:

CREATE OR REPLACE FUNCTION datetojulian(date)
 RETURNS integer AS
$BODY$
DECLARE
 d date := $1;
BEGIN

return (to_char(d::date, 'J')::int) - (to_char(((extract(year from d)-1)||'-12-31')::date, 'J')::int);

END
$BODY$
 LANGUAGE plpgsql VOLATILE
 COST 100;

 

Para a utilização da mesma, basta chamar a função passando como parâmetro a data que deseja realizar a conversão:

SELECT datetojulian('2017-03-02');

O resultado do exemplo deverá ser 61.