//------------------------------------ public static CValeurUnite FromString(string strChaine) { List <CValeurUnite> valeurs = DecomposeChaineFormattée(strChaine); bool bIsNegatif = false; if (valeurs.Count > 0 && valeurs[0].Valeur < 0) { bIsNegatif = true; valeurs[0].Valeur = -valeurs[0].Valeur; } CValeurUnite valeurFinale = null; foreach (CValeurUnite valeur in valeurs) { if (valeurFinale == null) { valeurFinale = valeur; } else { valeurFinale += valeur; } } if (bIsNegatif) { valeurFinale.Valeur = -valeurFinale.Valeur; } return(valeurFinale); }
//------------------------------------ public static CValeurUnite operator *(CValeurUnite valeur1, CValeurUnite valeur2) { string strU2 = CUtilUnite.GetUniteHarmonisee(valeur1.Unite, valeur2.Unite); if (strU2 != valeur2.Unite) { valeur2 = valeur2.ConvertTo(strU2); } string[] strCompos = CUtilUnite.Developpe(valeur1.Unite + "." + valeur2.Unite); string strUnite = CUtilUnite.Factorise(strCompos); CValeurUnite valeur = new CValeurUnite(valeur1.Valeur * valeur2.Valeur, strUnite); return(valeur); }
//------------------------------------ public static CValeurUnite operator -(CValeurUnite valeur1, CValeurUnite valeur2) { CValeurUnite valeur = valeur2.ConvertTo(valeur1.Unite); return(new CValeurUnite(valeur1.Valeur - valeur.Valeur, valeur1.Unite, valeur1.Format)); }
//------------------------------------ /// <summary> /// Décompose une valeur simple dans les unités de l'unité. /// Par exemple, 65 min décomposé en h min donne 1h5min /// </summary> /// <param name="strUnitesAUtiliser"></param> /// <returns></returns> public string GetStringDecomposeeValeurSimple(params string[] strUnitesAUtiliser) { List <string> strUnitesCorrigées = new List <string>(); foreach (string strUnite in strUnitesAUtiliser) { if (strUnite.Length > 0) { strUnitesCorrigées.Add(strUnite.Trim()); } } IUnite unite = CGestionnaireUnites.GetUnite(Unite); if (unite == null) { return(null); } IClasseUnite classe = unite.Classe; if (classe == null) { return(null); } List <double?> lstVals = new List <double?>(); double fValeurRestante = ConvertToBase(); StringBuilder bl = new StringBuilder(); CValeurUnite valeurTmp = new CValeurUnite(Math.Abs(fValeurRestante), classe.UniteBase); for (int nUnite = 0; nUnite < strUnitesCorrigées.Count; nUnite++) { string strUnite = strUnitesCorrigées[nUnite]; string strLib = strUnite; IUnite u = CGestionnaireUnites.GetUnite(strUnite); if (u != null) { strLib = u.LibelleCourt; } valeurTmp = valeurTmp.ConvertTo(strUnite); int nVal = (int)valeurTmp.Valeur; if (nUnite < strUnitesCorrigées.Count - 1) { valeurTmp = valeurTmp - (double)nVal; if (nVal > 0) { bl.Append(nVal + strLib + " "); } if (valeurTmp.Valeur == 0) { break; } } else { if (valeurTmp.Valeur != 0) { bl.Append(Math.Round(valeurTmp.Valeur, 5).ToString() + strLib); } } } if (Valeur < 0) { bl.Insert(0, "-"); } return(bl.ToString()); }