import 'dart:math'; class Utils { static double roundToDecimalPlaces(double value, int precision) { double mod = pow(10.0, precision).toDouble(); return ((value * mod).round().toDouble() / mod); } static double addDoublesWithPrecision(double a, double b, int precision) { double mod = pow(10.0, precision).toDouble(); double difference = (a * mod) + (b * mod); return difference.round() / mod; } static int getFractionDigitsLength(double value) { final fractionDigits = value.toString().split('.'); return fractionDigits[1].length; } static String toStringMatchingTemplateFractionPrecision( double value, double template) { final precision = getFractionDigitsLength(template); return value.toStringAsFixed(precision); } static double convertMgPerDlToMmolPerL(int mgPerDl) { return Utils.roundToDecimalPlaces(mgPerDl * 0.0555, 2); } static int convertMmolPerLToMgPerDl(double mmolPerL) { return (mmolPerL * 18.018).round(); } static double calculateCarbs(double carbsRatio, double portionSize) { return Utils.roundToDecimalPlaces(carbsRatio * portionSize / 100, 2); } static double calculateCarbsRatio( double carbsPerPortion, double portionSize) { return portionSize > 0 ? Utils.roundToDecimalPlaces(carbsPerPortion * 100 / portionSize, 2) : 0; } static double calculatePortionSize( double carbsRatio, double carbsPerPortion) { return carbsRatio > 0 ? Utils.roundToDecimalPlaces(carbsPerPortion * 100 / carbsRatio, 2) : 0; } }