quinta-feira, fevereiro 28, 2008

Poor Boy's Game

Quando olhei para a capa do filme e vi uma cena de boxe, pus este filme no fim dos filmes que tinha para ver porque sinceramente é um argumento já em desuso e que nunca me atraiu. Como poderia estar mais enganado o filme pouco tem a ver com boxe, aliás o papel boxe podia ser substituído por uma outra disputa qualquer. O filme é um turbilhão de sentimentos onde a nossa própria atitude perante o filme vai flutuando ao longo do mesmo. São nestas ocasiões que não acredito dos Óscares, o Danny Glover tem um desempenho soberbo como actor secundário e nem foi um dos nomeados.

quarta-feira, fevereiro 27, 2008

C# Double Separator

Andei com uns problemas de conversão de string para double, devido ao caracter que separa a parte inteira da parte decimal num número. Dependendo dos regional settings da máquina onde fazemos deploy do nosso código podemos ter como caracter separador a vírgula ou o ponto. O objectivo é fazer código que seja independente dos regional settings considerando sempre um dado caracter como separador.
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberDecimalSeparator = ",";
double val = double.Parse(text.Text, nfi);

Com este código a conversão utiliza sempre a vírgula como caracter separador.

sábado, fevereiro 23, 2008

Sites de Regular Expressions

Encontrei dois sites que para mim são uma grande ajuda quando tenho de fazer RegExs. O primeiro site http://regexlib.com/Search.aspx é como uma bíblia, com bastantes exemplos, referências bibliográficas e documentação online. O segundo http://www.fileformat.info/tool/regex.htm é uma ferramenta de teste onde se pode colocar a RegEx e as nossas strings de teste, obtendo a análise de cada uma quando avaliada pela RegEx.

terça-feira, fevereiro 05, 2008

Liberalização do despedimento

Quem terá sido o esclavagista com esta ideia peregrina? Basicamente isto era criar trabalho precário permanente, o que actualmente acontece é que pelo menos nos primeiros anos os trabalhadores estão sujeitos a trabalhar a recibos verdes ou a contratos de curta duração, se for criada uma lei para a liberalização dos despedimentos significa o mesmo que viver toda a vida nesta situação. O patronato já explora ao máximo os trabalhadores, com isto cria-se uma filosofia de desresponsabilização, não se quer ter mais encargos com uma determinada pessoa então dá-se um chuto dela e já está!

Precisão na soma de floats em javascript

Imagine-se que se quer somar dois valores que vêm de inputs, tendo por exemplo os valores 1,23 e 3,21.

var soma = parseFloat(input1) + parseFloat(input2);

O valor esperado na variável soma seria 4,44 infelizmente este não é o valor obtido, devido à precisão do float que não representa o número exactamente como lhe é passado, obtemos sim o valor 4,439999999. Para resolver este problema desenvolvi o seguinte algoritmo que possibilita truncar as casas decimais de um número.
//num = número a formatar; nDecimals = número de casas decimais
function Precision(num, nDecimals){
    var toReturn = "";
    num = "" + num;
    var pointIdx = num.indexOf('.');
    //garantir que é decimal
    if(pointIdx == -1){
        num += '.';
        pointIdx = num.indexOf('.');
    }
    var limit = pointIdx + nDecimals + 1;
    //quando se tem mais casas decimais que aquelas que se pretende
    if(num.length > limit){
        //arredondar para baixo
        if(num[limit] < '5')
        {
            for(var iter = 0; iter < limit; ++iter)
            {
                toReturn += num.charAt(iter);
            }
            return toReturn;
        }
        //arredondar para cima
        else{
            for(var iter = 0; iter < pointIdx + nDecimals; ++iter){
                toReturn += num.charAt(iter);
            }
            var lastNum = parseInt(num.charAt(pointIdx + nDecimals)) + parseInt(1);
            toReturn += lastNum;
            return toReturn;
        }
    }
    //acrescentar 0s à direita se necessário
    if(num.length < limit){
        while(num.length < limit){
            num += '0';
        }
    }
    return num;
}