@@ -45,6 +45,13 @@ class SCOPY_GUI_EXPORT IncrementStrategy
45
45
virtual double increment (double val) = 0;
46
46
virtual double decrement (double val) = 0;
47
47
virtual void setScale (double scale) = 0;
48
+
49
+ protected:
50
+ static double roundToNDecimals (double value, int n)
51
+ {
52
+ double factor = std::pow (10.0 , n);
53
+ return std::round (value * factor) / factor;
54
+ }
48
55
};
49
56
50
57
class SCOPY_GUI_EXPORT IncrementStrategy125 : public IncrementStrategy
@@ -55,8 +62,8 @@ class SCOPY_GUI_EXPORT IncrementStrategy125 : public IncrementStrategy
55
62
IncrementStrategy125 ()
56
63
: m_steps(1e-9 , 1e9 , 10 ){};
57
64
~IncrementStrategy125 (){};
58
- virtual double increment (double val) override { return m_steps.getNumberAfter (val); }
59
- virtual double decrement (double val) override { return m_steps.getNumberBefore (val); }
65
+ virtual double increment (double val) override { return roundToNDecimals ( m_steps.getNumberAfter (val), 9 ); }
66
+ virtual double decrement (double val) override { return roundToNDecimals ( m_steps.getNumberBefore (val), 9 ); }
60
67
61
68
double m_scale;
62
69
void setScale (double scale) override { m_scale = scale; }
@@ -83,7 +90,7 @@ class SCOPY_GUI_EXPORT IncrementStrategyPower2 : public IncrementStrategy
83
90
while (val > m_steps[i]) {
84
91
i++;
85
92
}
86
- return m_steps[i];
93
+ return roundToNDecimals ( m_steps[i], 9 ) ;
87
94
}
88
95
virtual double decrement (double val) override
89
96
{
@@ -92,7 +99,7 @@ class SCOPY_GUI_EXPORT IncrementStrategyPower2 : public IncrementStrategy
92
99
while (val < m_steps[i]) {
93
100
i--;
94
101
}
95
- return m_steps[i];
102
+ return roundToNDecimals ( m_steps[i], 9 ) ;
96
103
}
97
104
double m_scale;
98
105
@@ -110,12 +117,12 @@ class SCOPY_GUI_EXPORT IncrementStrategyFixed : public IncrementStrategy
110
117
virtual double increment (double val) override
111
118
{
112
119
val = val + m_k * m_scale;
113
- return val;
120
+ return roundToNDecimals ( val, 9 ) ;
114
121
}
115
122
virtual double decrement (double val) override
116
123
{
117
124
val = val - m_k * m_scale;
118
- return val;
125
+ return roundToNDecimals ( val, 9 ) ;
119
126
}
120
127
void setK (double val) { m_k = val; }
121
128
double k () { return m_k; }
0 commit comments