EN · DE · RU · FR · ES

#1379: NumberFormatter.kt

projectforge-business/src/main/kotlin/org/projectforge/framework/utils/NumberFormatter.kt Тип: Kotlin · Роль: Утилита · Исходник: projectforge-business/src/main/kotlin/org/projectforge/framework/utils/NumberFormatter.kt 174 строки · 94 кода · 69 комментариев · 11 пустых
Статические вспомогательные методы для NumberFormatter. Набор чистых функций без побочных эффектов, предоставляющих общие вспомогательные операции.

Структура кода

Аннотации: param, JvmOverloads, JvmStatic, return, see

Объекты: NumberFormatter, is, is, is

Функции (9): format, format, format, format, format, formatCurrency, formatNull, internalFormat, formatPercent

Свойства (5): df, useLocale, amount, format, bigDecimal

Импорты: 10 пакетов

Пакет: org.projectforge.framework.utils

Исходный код (сокращён)

package org.projectforge.framework.utils

import org.projectforge.Constants
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext
import java.math.BigDecimal
import java.math.BigInteger
import java.math.RoundingMode
import java.text.DecimalFormat
import java.text.NumberFormat
import java.time.Month
import java.time.format.TextStyle
import java.util.*

object NumberFormatter {
  /**
   * @param value Форматируемое значение.
   * @param pattern Строка формата для [DecimalFormat].
   * @param roundingMode [RoundingMode.HALF_UP] по умолчанию.
   * @return Отформатированное число или пустая строка, если значение равно null.
   * @see ThreadLocalUserContext.getLocale
   */
  @JvmStatic
  @JvmOverloads
  fun format(value: Number?, pattern: String, roundingMode: RoundingMode = RoundingMode.HALF_UP): String {
    value ?: return ""
    return format(value, pattern, ThreadLocalUserContext.locale!!, roundingMode)
  }

  /**
   * @param value Форматируемое значение.
   * @param pattern Строка формата для [DecimalFormat].
   * @param locale Используемая локаль.
   * @param roundingMode [RoundingMode.HALF_UP] по умолчанию.
   * @return Отформатированное число или пустая строка, если значение равно null.
   */
  @JvmStatic
  @JvmOverloads
  fun format(
    value: Number?,
    pattern: String,
    locale: Locale,
    roundingMode: RoundingMode = RoundingMode.HALF_UP
  ): String {
    value ?: return ""
    val df = DecimalFormat.getInstance(locale) as DecimalFormat
    df.applyPattern(pattern);
    df.roundingMode = roundingMode
    return df.format(value)
  }

  /**
   * Возвращает строковое представление переданного целого числа.
   *
   * @param value Целое число для преобразования.
   * @param scale Масштабирование вывода, null по умолчанию (используется масштаб объекта).
   * @return Строковое представление или пустая/null строка, если значение равно null.
   */
  @JvmStatic
  fun format(value: Number?, locale: Locale): String {
    return internalFormat(value, locale = locale) ?: ""
  }

  /**
   * Возвращает строковое представление переданного целого числа.
   *
   * @param value Целое число для преобразования.
   * @param scale Масштабирование вывода, null по умолчанию (используется масштаб объекта).
   * @return Строковое представление или пустая/null строка, если значение равно null.
   */
  @JvmStatic
  @JvmOverloads
  fun format(value: Number?, scale: Int? = null): String {
    return internalFormat(value, scale) ?: ""
  }

  @JvmStatic
  @JvmOverloads
  fun format(month: Month, locale: Locale? = ThreadLocalUserContext.locale): String {
    val useLocale = locale ?: Locale.ENGLISH
    return month.getDisplayName(TextStyle.FULL_STANDALONE, useLocale)
  }

  /**
   * Возвращает строковое представление переданного целого числа (масштаб = 2).
   *
   * @param value Целое число для преобразования.
   */
  @JvmStatic
  @JvmOverloads
  fun formatCurrency(value: Number?, withCurrencySymbol: Boolean = false): String {
    val amount = internalFormat(value, 2) ?: return ""
    return if (!withCurrencySymbol || Constants.CURRENCY_SYMBOL.isNullOrBlank()) {
      amount
    } else {
      "$amount ${Constants.CURRENCY_SYMBOL}"
    }
  }

  /**
   * Возвращает строковое представление переданного целого числа.
   *
   * @param value Целое число для преобразования.
   * @param defaultValue Для null-значений возвращается это значение (по умолчанию "").
   * @param scale Масштабирование вывода, null по умолчанию (используется масштаб объекта).
   * @return Строковое представление или пустая/null строка, если значение равно null.
   */
  @JvmStatic
  @JvmOverloads
  fun formatNull(value: Number?, scale: Int? = null): String? {
    return internalFormat(value, scale)
  }

  private fun internalFormat(
    value: Number?,
    scale: Int? = null,
    locale: Locale = ThreadLocalUserContext.locale!!
  ): String? {
    if (value == null)
      return null
// ... (сокращено, всего 152 строки)

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024 -> 2025.
b6092df09 Авторские права 2023 -> 2024
ab45d51fa Авторские права 2001-2022 -> 2001-2023.
dcfc7c1a9 Старый календарь перенесён в подменю, ScriptingTask*, JiraUtils