The imaginary part is never exactly 0 — the _Complex.of factory guarantees this invariant by collapsing to _Number in that case. Construction through of is the only public route; pattern matching _Complex(re, im) remains available.
Like _Number, a _Complex never rounds in eval; rounding is a display concern handled by toString / display(p). A rounded-away imaginary part causes the value to print as a plain real (e.g. exp(i·π) → "-1.0"); a pure imaginary value prints as "bi" / "i" / "-i"; the full form is "(a + bi)".
Value parameters
im
imaginary part; guaranteed non-zero by the _Complex.of factory
Renders this complex number at Environment.DefaultPrecision decimal places. A rounded-away imaginary part yields a plain real string; a zero real part yields "bi" / "i" / "-i"; otherwise "(a ± bi)".
Renders this complex number at Environment.DefaultPrecision decimal places. A rounded-away imaginary part yields a plain real string; a zero real part yields "bi" / "i" / "-i"; otherwise "(a ± bi)".