Revision 2227
org.gvsig.tools/library/trunk/org.gvsig.tools/org.gvsig.tools.lib/src/main/java/org/gvsig/tools/dataTypes/impl/DefaultDataType.java | ||
---|---|---|
293 | 293 |
|
294 | 294 |
@Override |
295 | 295 |
public NumberPrecisionAndScale fixPrecisionAndScale(int precision, int scale) { |
296 |
if( (this.flags&FLAG_SUPPORT_PRECISION) != FLAG_SUPPORT_PRECISION ) {
|
|
297 |
return EMPTY_PRECISION_AND_SCALE;
|
|
296 |
if ((this.flags & FLAG_SUPPORT_PRECISION) != FLAG_SUPPORT_PRECISION) {
|
|
297 |
return EMPTY_PRECISION_AND_SCALE; |
|
298 | 298 |
} |
299 | 299 |
DefaultNumberPrecisionAndScale r = new DefaultNumberPrecisionAndScale( |
300 |
precision,
|
|
300 |
precision, |
|
301 | 301 |
scale |
302 | 302 |
); |
303 |
if( (this.flags&FLAG_PREDEFINED_PRECISION) == FLAG_PREDEFINED_PRECISION ) {
|
|
303 |
if ((this.flags & FLAG_PREDEFINED_PRECISION) == FLAG_PREDEFINED_PRECISION) {
|
|
304 | 304 |
r.precision = max_precision; |
305 | 305 |
} |
306 |
if( (this.flags&FLAG_SUPPORT_SCALE) != FLAG_SUPPORT_SCALE ) {
|
|
306 |
if ((this.flags & FLAG_SUPPORT_SCALE) != FLAG_SUPPORT_SCALE) {
|
|
307 | 307 |
// Soporta precision y no escala (byte, int, long... enteros) |
308 | 308 |
r.scale = 0; |
309 |
if( r.precision > max_precision ) {
|
|
309 |
if (r.precision > max_precision) {
|
|
310 | 310 |
r.precision = max_precision; |
311 |
} else if( r.precision < 1 ) {
|
|
311 |
} else if (r.precision < 1) {
|
|
312 | 312 |
r.precision = default_precision; |
313 | 313 |
} |
314 | 314 |
} else { |
315 |
if( r.scale == SCALE_NONE ) { |
|
316 |
r.scale = default_scale; |
|
317 |
} |
|
318 |
// Soporta precision y escala. |
|
319 |
if (r.precision < 1) { |
|
315 |
// Soporta precision y escala (BigDecimal) |
|
316 |
if (r.precision < 1) { |
|
320 | 317 |
// Sin precision |
321 | 318 |
if (r.scale < 1) { |
322 | 319 |
// Sin precision y sin escala |
323 |
// Asinamos los valores por defecto. |
|
320 |
// Asignamos los valores por defecto.
|
|
324 | 321 |
r.precision = default_precision; |
325 | 322 |
r.scale = default_scale; |
326 | 323 |
} else { |
327 | 324 |
// Sin precision y con escala. |
328 |
if (r.scale <= max_precision) {
|
|
325 |
if (r.scale <= default_scale) {
|
|
329 | 326 |
// Sin precision y con escala < maxima precision. |
330 | 327 |
// Asignamos la precision a la maxima. |
328 |
r.precision = default_precision; |
|
329 |
} else if (r.scale < default_precision) { |
|
330 |
// Sin precision y con escala < maxima precision. |
|
331 |
// Asignamos la precision a la maxima. |
|
332 |
r.precision = default_precision; |
|
333 |
} else if (r.scale <= max_precision) { |
|
334 |
// Sin precision y con escala < maxima precision. |
|
335 |
// Asignamos la precision a la maxima. |
|
331 | 336 |
r.precision = max_precision; |
332 | 337 |
} else { |
333 | 338 |
// Sin precision y con escala > maxima precision. |
... | ... | |
380 | 385 |
} |
381 | 386 |
} |
382 | 387 |
} |
388 |
if( (this.flags & FLAG_FLOATING_POINT) == FLAG_FLOATING_POINT ) { |
|
389 |
if( r.scale<1 ) { |
|
390 |
r.scale = SCALE_NONE; |
|
391 |
} |
|
392 |
} |
|
383 | 393 |
return r; |
384 | 394 |
} |
385 | 395 |
|
Also available in: Unified diff