PgDecimal class final

Número decimal de precisão arbitrária, equivalente ao tipo numeric do PostgreSQL (inclusive NaN, Infinity e -Infinity).

O valor é unscaledValue × 10^-scale. A escala (número de dígitos depois da vírgula) é preservada como no PostgreSQL: PgDecimal.parse('1.50') tem escala 2 e é impresso como 1.50, mas é igual (==) a 1.5.

As operações seguem o PostgreSQL:

  • + e -: escala do resultado = maior escala dos operandos;
  • *: soma das escalas;
  • /: a mesma escala que o PostgreSQL escolhe (pelo menos 16 dígitos significativos e não menos que a escala de cada operando), com arredondamento PgRoundingMode.halfAwayFromZero; divide permite escolher a escala e o arredondamento;
  • ~/ e %: divisão inteira truncada e resto com o sinal do dividendo (div e % do PostgreSQL);
  • NaN é igual a NaN e maior que qualquer outro valor (inclusive Infinity), como na ordenação do PostgreSQL; operações com NaN resultam em NaN; Infinity - Infinity e 0 * Infinity são NaN.

Divisão por zero lança UnsupportedError.

Implemented types

Constructors

PgDecimal.fromBigInt(BigInt unscaledValue, {int scale = 0})
unscaledValue × 10^-scale. scale não pode ser negativa.
factory
PgDecimal.fromDouble(double value)
O valor decimal mais curto que representa value (o mesmo de value.toString()): PgDecimal.fromDouble(0.1) é 0.1.
factory
PgDecimal.fromInt(int value)
Valor inteiro (escala 0).
factory
PgDecimal.parse(String source)
Lê um número no formato de entrada do numeric do PostgreSQL: sinal opcional, dígitos com ponto decimal opcional e expoente opcional (1.5e-3), ou NaN, Infinity, -Infinity, inf, -inf (maiúsculas ou minúsculas). Espaços nas pontas são ignorados.
factory

Properties

hashCode → int
The hash code for this object.
no setteroverride
isFinite → bool
Se não é NaN nem infinito.
no setter
isInfinite → bool
Se é Infinity ou -Infinity.
no setter
isNaN → bool
Se é NaN.
no setter
isNegative → bool
Se é menor que zero (inclusive -Infinity).
no setter
isZero → bool
Se é zero (com qualquer escala).
no setter
postgresTypeName → String?
Nome do tipo usado no cast quando o valor é inserido no SQL (por exemplo interval), ou null para não fazer cast.
no setteroverride
precision → int
Número de dígitos significativos (sem zeros à esquerda; zero → 1).
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
scale → int
Número de dígitos depois da vírgula (0 para valores não finitos).
no setter
sign → int
-1, 0 ou 1 (NaN → 0).
no setter
unscaledValue → BigInt
O valor sem a vírgula: this == unscaledValue × 10^-scale.
no setter

Methods

abs() → PgDecimal
Valor absoluto.
ceil() → PgDecimal
Menor inteiro maior ou igual a este valor (escala 0).
compareTo(PgDecimal other) → int
Compara como o PostgreSQL: -Infinity < finitos < Infinity < NaN.
override
divide(PgDecimal other, {required int scale, PgRoundingMode mode = PgRoundingMode.halfAwayFromZero}) → PgDecimal
Divisão com scale dígitos depois da vírgula, arredondada conforme mode.
floor() → PgDecimal
Maior inteiro menor ou igual a este valor (escala 0).
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
rescale(int scale, [PgRoundingMode mode = PgRoundingMode.halfAwayFromZero]) → PgDecimal
O valor com exatamente scale dígitos depois da vírgula (ver round).
round([int scale = 0, PgRoundingMode mode = PgRoundingMode.halfAwayFromZero]) → PgDecimal
O valor arredondado para scale dígitos depois da vírgula (como round(x, scale) do PostgreSQL). scale pode ser negativa: round(-1) arredonda para dezenas e o resultado tem escala 0. A escala do resultado é max(scale, 0), mesmo que maior que a atual (round(1.5, 3) → 1.500). Valores não finitos são devolvidos como estão.
toBigInt() → BigInt
A parte inteira (truncada). Lança UnsupportedError para valores não finitos.
toDouble() → double
O valor como double (o mais próximo).
toInt() → int
A parte inteira (truncada). Lança UnsupportedError para valores não finitos ou fora da faixa de int.
toPostgresText() → String
Texto aceito pela função de entrada do tipo no PostgreSQL.
override
toString() → String
Texto no formato de saída do PostgreSQL: sem expoente e com exatamente scale dígitos depois da vírgula (NaN, Infinity, -Infinity para os valores especiais).
override
truncate([int scale = 0]) → PgDecimal
Como round, com PgRoundingMode.towardZero (trunc do PostgreSQL).

Operators

operator %(PgDecimal other) → PgDecimal
Resto da divisão truncada, com o sinal do dividendo (% do PostgreSQL). A escala é a maior dos operandos.
operator *(PgDecimal other) → PgDecimal
operator +(PgDecimal other) → PgDecimal
operator -(PgDecimal other) → PgDecimal
operator /(PgDecimal other) → PgDecimal
Divisão com a escala escolhida pelo PostgreSQL (ver a documentação da classe). Use divide para escolher a escala.
operator <(PgDecimal other) → bool
operator <=(PgDecimal other) → bool
operator ==(Object other) → bool
Igualdade numérica (1.5 == 1.50); NaN == NaN, como no PostgreSQL.
override
operator >(PgDecimal other) → bool
operator >=(PgDecimal other) → bool
operator unary-() → PgDecimal
operator ~/(PgDecimal other) → PgDecimal
Divisão inteira truncada em direção a zero (div do PostgreSQL).

Static Properties

infinity → PgDecimal
final
nan → PgDecimal
final
negativeInfinity → PgDecimal
final
one → PgDecimal
final
zero → PgDecimal
final

Static Methods

tryParse(String source) → PgDecimal?
Como PgDecimal.parse, mas devolve null se o texto não for um número.

Constants

maxScale → const int
Maior escala que o PostgreSQL aceita (NUMERIC_DSCALE_MAX).