为什么我的PostgreSQL“真实”数据被四舍五入?

时间:2019-05-28 10:27:47

标签: postgresql precision postgresql-11

我有一个表,该表的列名为total,数据类型为real

但是我在查询其值时发现该列已被四舍五入,如下所示:

SELECT total FROM data WHERE id='xe54g';
 total 
---------
  105861

UPDATE data SET total=105860.5 WHERE id='xe54g';        
UPDATE 1

SELECT total FROM data WHERE id='xe54g';
 total 
---------
  105860

UPDATE data SET total=105860.7 WHERE id='xe54g';        
UPDATE 1

SELECT total FROM data WHERE id='xe54g';
 total 
---------
  105861

\d+ data
   Column  |  Type | Collation | Nullable |  Default  | Storage  | Stats target | Description 
-----------+-------+-----------+----------+-----------+----------+--------------+-------------
 total     | real  |           |          | 0         | plain    |              | 

如何获取返回的全精度?我正在使用PG 11.1。

1 个答案:

答案 0 :(得分:1)

您可以通过设置获得完整的精度

export class InputSelectorDirective {

  @HostBinding('attr.type') inputType: string = "checkbox";

  ngControl: NgControl;

  constructor(
    private R: Renderer2,
    private elRef: ElementRef<HTMLInputElement>,
    private injector: Injector
  ) {
    this.ngControl = injector.get(NgControl);

  }

  ngOnInit() {
    // this.inputType = "checkbox";
    this.ngControl.control.valueChanges
      .subscribe(value => this.ngControl.control.setValue(this.elRef.nativeElement.checked, { emitEvent: false }));
  }
}

然后PostgreSQL也将显示可能包含舍入错误的十进制数字。

请注意,extra_float_digits = 3 的有效数字较少。如果您使用real,会更快乐。