using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Collections.Specialized;
///
/// Descrizione di riepilogo per Function
///
public static class LibFunction
{
public enum tipoArrotondamento
{
eccesso,
difetto,
arbitrario
}
///
/// Funzione per arrotondare i valori sugli assi dei grafici
///
/// Valore numerico da arrotondare
/// Tipo di arrotondamento ad es. per eccesso forza l'arrotondamento sempre per eccesso
/// Restituisce un double
public static double ArrotondaAxis (double valore, tipoArrotondamento tipo)
{
double tempValue;
int peso;
double results = 0.0;
int ordineGrandezza;
int pesoArrotondamento = 1;
bool neg = false;
if (valore == 0)
return 0;
else if (valore < 0)
{
neg = true;
valore = Math.Abs(valore);
}
ordineGrandezza = Convert.ToString(Math.Truncate(Math.Abs(valore))).Length;
if (ordineGrandezza == 5)
peso = 1;
else if (ordineGrandezza == 6)
peso = 2;
else if (ordineGrandezza > 6)
peso = 3;
else
peso = 0;
if (ordineGrandezza > 2)
{
pesoArrotondamento = Convert.ToInt32(Math.Pow(10.0, Convert.ToDouble(ordineGrandezza - peso - 1)));
tempValue = valore / Convert.ToDouble(pesoArrotondamento);
}
else
{
pesoArrotondamento = 1;
tempValue = valore;
}
switch (tipo)
{
case tipoArrotondamento.eccesso:
if (tempValue==1)
results = Math.Round(tempValue, MidpointRounding.AwayFromZero) * pesoArrotondamento;
else
results = Math.Round(tempValue + 0.5, MidpointRounding.AwayFromZero) * pesoArrotondamento;
break;
case tipoArrotondamento.difetto:
results = Math.Floor(tempValue) * pesoArrotondamento;
break;
default:
results = Math.Round(tempValue, MidpointRounding.AwayFromZero) * pesoArrotondamento;
break;
}
if (neg)
return results * (-1);
else
return results;
}
///
/// Arrotonda le cifre percentuali
///
/// Valore numerico da arrotondare
/// Tipo di arrotondamento ad es. per eccesso forza l'arrotondamento sempre per eccesso
///
public static double ArrotondaPercentuale (double valore, tipoArrotondamento tipo)
{
double tempValue;
double results = 0.0;
bool neg = false;
if (valore == 0)
return 0;
else if (valore < 0)
{
neg = true;
valore = Math.Abs(valore);
}
tempValue = Math.Truncate(Math.Abs(valore));
switch (tipo)
{
case tipoArrotondamento.eccesso:
results = Math.Round(tempValue + 0.5, MidpointRounding.AwayFromZero);
break;
case tipoArrotondamento.difetto:
results = Math.Floor(tempValue - 0.5);
break;
default:
results = Math.Ceiling(tempValue);
break;
}
if (neg)
return results * (-1);
else
return results;
}
}