Hyperlinkv0.8.0-beta.28

BigDecimal

BigDecimal.normalizeconsteffect/BigDecimal.ts:195
(self: BigDecimal): BigDecimal

Normalizes a given BigDecimal by removing trailing zeros.

When to use

Use to canonicalize decimals that have equivalent values but different internal scales.

Example (Normalizing trailing zeros)

import { BigDecimal } from "effect"
import * as assert from "node:assert"

assert.deepStrictEqual(
  BigDecimal.normalize(BigDecimal.fromStringUnsafe("123.00000")),
  BigDecimal.normalize(BigDecimal.make(123n, 0))
)
assert.deepStrictEqual(
  BigDecimal.normalize(BigDecimal.fromStringUnsafe("12300000")),
  BigDecimal.normalize(BigDecimal.make(123n, -5))
)
scalingformat
export const normalize = (self: BigDecimal): BigDecimal => {
  if (self.normalized === undefined) {
    if (self.value === bigint0) {
      self.normalized = zero
    } else {
      const digits = `${self.value}`

      let trail = 0
      for (let i = digits.length - 1; i >= 0; i--) {
        if (digits[i] === "0") {
          trail++
        } else {
          break
        }
      }

      if (trail === 0) {
        self.normalized = self
      }

      const value = BigInt(digits.substring(0, digits.length - trail))
      const scale = self.scale - trail
      self.normalized = makeNormalizedUnsafe(value, scale)
    }
  }

  return self.normalized
}
Referenced by 3 symbols