We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
1 parent 5ea6938 commit 7557fbbCopy full SHA for 7557fbb
2 files changed
src/FixedPointDecimals.jl
@@ -29,7 +29,7 @@ using Compat
29
30
import Base: reinterpret, zero, one, abs, sign, ==, <, <=, +, -, /, *, div,
31
rem, divrem, fld, mod, fldmod, fld1, mod1, fldmod1, isinteger,
32
- typemin, typemax, realmin, realmax, print, show, string, convert,
+ typemin, typemax, realmin, realmax, print, show, string, convert, parse,
33
promote_rule, min, max, trunc, round, floor, ceil, eps, float, widemul
34
35
const IEEEFloat = Union{Float16, Float32, Float64}
@@ -292,4 +292,18 @@ function show{T, f}(io::IO, x::FD{T, f})
292
end
293
294
295
+# parsing
296
+function parse{T, f}(::Type{FD{T, f}}, str::AbstractString)
297
+ dp = findfirst(str, '.')
298
+ if dp > 0
299
+ int_str = str[1:(dp - 1)] * str[(dp + 1):min(dp + f, end)]
300
+ len = dp + f - 1
301
+ else
302
+ int_str = str
303
+ len = length(str) + f
304
+ end
305
+ val = parse(T, rpad(int_str, len, '0'))
306
+ reinterpret(FD{T, f}, val)
307
+end
308
+
309
test/runtests.jl
@@ -412,4 +412,20 @@ end
412
413
414
415
+@testset "parse" begin
416
+ @test parse(FD2, "123") == reinterpret(FD2, 12300)
417
+ @test parse(FD2, ".123") == reinterpret(FD2, 12)
418
+ @test parse(FD2, "1.23") == reinterpret(FD2, 123)
419
+ @test parse(FD2, "12.3") == reinterpret(FD2, 1230)
420
+ @test parse(FD2, "123.") == reinterpret(FD2, 12300)
421
422
+ @test parse(FD2, "-123") == reinterpret(FD2, -12300)
423
+ @test parse(FD2, "-.123") == reinterpret(FD2, -12)
424
+ @test parse(FD2, "-1.23") == reinterpret(FD2, -123)
425
+ @test parse(FD2, "-12.3") == reinterpret(FD2, -1230)
426
+ @test parse(FD2, "-123.") == reinterpret(FD2, -12300)
427
428
+ @test parse(FD2, "2.3") == reinterpret(FD2, 230)
429
430
431
end # global testset
0 commit comments