import type { _RemoveTrailingFractionalZeroes } from "./_RemoveTrailingFractionalZeroes"; import type { _ReplaceAllCharsWithZero } from "./_ReplaceAllCharsWithZero"; import type { _ReverseString } from "./_ReverseString"; import type { _StrToNum } from "./_StrToNum"; /** * Divide integer `N` by 10^`Length`. * * **⚠️ Warning:** length of `By` must be less than or equal to the number of digits in `N`. * @private * * @example * ```typescript * type R1 = _Div10<"125", "_">; * // ^?: "12.5" * type R2 = _Div10<"-12300", "__">; * // ^?: "-123" * type R3 = _Div10<"-12300", "___">; * // ^?: "-12.3" * ``` */ export type _Div10 = N extends `-${infer N}` ? `-${__Div10}` : __Div10; type __Div10 = ___Div10<_ReverseString<`${N}`>, By, ""> extends infer R extends string ? R extends `.${infer R}` ? `0.${R}` : R : never; type ___Div10 = By extends `${string}${infer RestBy}` ? A extends `${infer F}${infer R}` ? ___Div10 : `0.${_ReplaceAllCharsWithZero}${B}` : _RemoveTrailingFractionalZeroes<`${_ReverseString}.${B}`>;