Outras dicas

A sua não é possível, uma expressão regular não tem qualquer conceito de "números". Você poderia usar um jogo avaliador , mas você estaria adicionando imperativo de código C #, e se desvia de sua regex único requisito.

Net tem suporte embutido para ambos Aritmética e Bankers' arredondamento:

//midpoint always goes 'up': 2.5 -> 3
Math.Round( input, MidpointRounding.AwayFromZero );

//midpoint always goes to nearest even: 2.5 -> 2, 5.5 -> 6
//aka bankers' rounding
Math.Round( input, MidpointRounding.ToEven );

"Para até mesmo" arredondamento é realmente o padrão, mesmo que "longe de zero" é o que você aprendeu na escola.

Isso ocorre porque sob os processadores de computador capô também fazem banqueiros de arredondamento.

//defaults to banker's
Math.Round( input );

Eu teria pensado que qualquer cadeia de formato arredondamento seria padrão para banqueiros arredondamento, não é este o caso?

Se você estiver usando o .NET 3.5, você pode definir um método de extensão para ajudar você a fazer isso:

public static class DoubleExtensions
{
    public static string Format(this double d)
    {
        return String.Format("{0:c}", Math.Round(d));
    }
}

Então, quando você chamá-lo, você pode fazer:

12345.6789.Format();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top