I have a multi client accounting app. The preference of decimal points in a double is different for different clients. Is there any way to set the precision of double both in calculation and display globally ?
            Asked
            
        
        
            Active
            
        
            Viewed 118 times
        
    0
            
            
        - 
                    [You should *not* use `double`s for an accounting application](https://stackoverflow.com/q/57444957/). – jamesdlin Jul 07 '21 at 16:52
1 Answers
0
            
            
        I'm afraid there's no way to do it.
I have an app which is very similar to yours, and I have created a class for all numbers:
const int precision = 3;
class NumberEntry implements Comparable<NumberEntry> {
  final num value;
  NumberEntry(num input) : value = _round(input);
  static num _round(num input) {
    return num.parse(input.toStringAsFixed(precision));
  }
  NumberEntry operator +(NumberEntry other) => NumberEntry(value + other.value);
  NumberEntry operator -(NumberEntry other) => NumberEntry(value - other.value);
  NumberEntry operator *(NumberEntry other) => NumberEntry(value * other.value);
  NumberEntry operator /(NumberEntry other) => NumberEntry(value / other.value);
  bool operator >(NumberEntry other) => value > other.value;
  bool operator <(NumberEntry other) => value < other.value;
  bool operator >=(NumberEntry other) => value >= other.value;
  bool operator <=(NumberEntry other) => value <= other.value;
  @override
  int compareTo(NumberEntry other) {
    if (value == other.value) {
      return 0;
    }
    return value > other.value ? 1 : -1;
  }
  @override
  String toString() {
    return displayText;
  }
  String get displayText {
    return value.toStringAsFixed(precision);
  }
  String get displayTextWithSign {
    final String additionalSign = !value.isNegative ? '+' : '';
    return additionalSign + displayText;
  }
  NumberEntry abs() {
    return NumberEntry(value.abs());
  }
}
You might modify it to suit your needs.
 
    
    
        Crizant
        
- 1,571
- 2
- 10
- 14
