Revision 2227

View differences:

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