/vqdr/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/vqdr/trunk

« back to all changes in this revision

Viewing changes to src/common/fast_number.vala

  • Committer: Gustav Hartvigsson
  • Date: 2021-09-09 12:57:20 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20210909125720-x6t14nri2anelxp6
Added Round Up and Round Down function classes.
Added ronud up and round down operations to FastNumbers to facitilate this.

TODO: Write tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * The contects of this file is in the Public Domain.
 
3
 *
 
4
 * Created by Gustav Hartivgsson.
 
5
 */
 
6
 
1
7
namespace VQDR.Common {
2
8
  
3
9
  /**
11
17
  public struct FastNumber {
12
18
    public const long MUL_FACTOR = 1000;
13
19
    
 
20
    /** Precision used to output values */
 
21
    public const int PRECISION_DIGITS = 2;
 
22
    /** Precision factor used to evaluate output */
 
23
    public const int PRECISION_FACTOR = 100;
 
24
    
14
25
    public long raw_number;
15
26
    
16
27
    public long number {
88
99
      return this.raw_number - other.raw_number;
89
100
    }
90
101
    
 
102
    public FastNumber round_up () {
 
103
      FastNumber ret;
 
104
      long decimal = raw_number % PRECISION_FACTOR;
 
105
      if (decimal > 0) {
 
106
        ret = FastNumber.raw (raw_number + PRECISION_FACTOR - decimal);
 
107
      } else {
 
108
        ret = FastNumber.raw (raw_number - decimal);
 
109
      }
 
110
      return ret;
 
111
    }
 
112
    
 
113
    public FastNumber round_down () {
 
114
      FastNumber ret;
 
115
      long decimal = raw_number % PRECISION_FACTOR;
 
116
      if (decimal < 0) {
 
117
        // Is this ever reached?
 
118
        ret = FastNumber.raw (raw_number - PRECISION_FACTOR - decimal);
 
119
      } else {
 
120
        ret = FastNumber.raw (raw_number - decimal);
 
121
      }
 
122
      return ret;
 
123
    }
 
124
    
91
125
    public string to_string (bool decimal = false) {
92
126
      if (decimal) {
93
127
        return number.to_string () + "." + decimal.to_string ();
135
169
    
136
170
    [CCode (cname = "vqdr_common_fast_number_compare")]
137
171
    public static extern long static_compare (FastNumber a, FastNumber b);
138
 
    
139
172
  }
140
173
}