Repository navigation
Numeric and String Extensions
Ilia Petrov-Komotskii edited this page Sep 24, 2026
·
5 revisions
Clamp, remap, saturating int math, clock strings, and culture-invariant parsing.
using Mane.DotNet;
int hp = damage.Clamp(0, 100);
float t = x.Clamp01();
float ui = health.Remap(0f, maxHp, 0f, 1f); // does not clamp the result
int sum = a.SafePlus(b); // saturates on overflow
bool even = n.IsEven();-
Clamp(min, max)— genericIComparable<T>;min > maxthrows. -
ClampMin/ClampMax— one-sided. -
Clamp01— float, double, decimal. -
Remap— linear map. Zero-width source range returnsdestFrom. Result is not clamped to the destination. -
SafePlus/SafeMinus/SafeMultiply— saturatingintarithmetic.
Hours/minutes are total duration, not wrapped mod 24/60. Negative and zero format as zeros.
TimeSpan.FromHours(26).ToHHMMSS(); // 26:00:00
TimeSpan.FromMinutes(90).ToMMSS(); // 90:00
TimeSpan.Zero.ToHHMM(); // 00:00Invariant number parsers trim whitespace and apostrophes. The last . or , is the decimal separator; extra marks of the same kind are thousands separators. Null/empty/invalid → defaultValue (no throw). Integers also accept a whole number with a zero fractional part (1.000).
int n = "1.000".ParseIntInvariant(); // 1 — zero fractional part is allowed
float f = "1.234,5".ParseFloatInvariant(); // last comma is decimal → 1234.5
"hello".ToUpperFirst(); // Hello
int apples = 21;
string label = apples.GetCountedString("яблоко", "яблока", "яблок");GetCountedString is Slavic-style (count % 100 / % 10): 1, 21 → one; 2–4, 22–24 → many; everything else (0, 5–20, 25, 11–19, …) → more. Null templates throw.
openupm add com.manefunction.tools-dotnet