def dec.exact
yaml-for-bend@0.1.1.0 · num.bend:195
import yaml-for-bend@0.1.1.0/num.bend as Num
import Base
195
196
197
198def dec.exact(+s: String) -> String:
199 +neg = String.starts_with(s, "-")
200 +body = Bool.pick(String, Bool.or(neg, String.starts_with(s, "+")), String.drop(s, 1n), s)
201 +ip = take.digits(body)
202 +fp = take.digits(after.dot(body))
203 +e = exp.read(after.e(body))
204 +all = ip ++ fp
205 +lead = Nat.sub(String.length(all), String.length(drop.zeros(all)))
206 +ds = strip.end.zeros(drop.zeros(all))
207 +point = Nat.sub(point.at(String.length(ip), e), lead)
208 +sign = Bool.pick(String, neg, "-", "")
209 when(String, Bool.and(Bool.not(String.is_empty(ds)), Nat.is_gt(point, Nat.add(dec.off(), 309n))), u => sign ++ ".inf",
210 u => when(String, Bool.or(String.is_empty(ds), Nat.is_lt(Nat.add(point, 330n), dec.off())), u => sign ++ "0.0",
211 u => sign ++ dec.place(ds, point, dec.off())))