Skip to content

Instantly share code, notes, and snippets.

@phausler
Created November 28, 2016 17:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save phausler/8462b73cb3e4bd7bbd58787c38481781 to your computer and use it in GitHub Desktop.
Save phausler/8462b73cb3e4bd7bbd58787c38481781 to your computer and use it in GitHub Desktop.
extension Decimal {
var doubleValue: Double {
var d = 0.0
var i = _length
if _length == 0 && _isNegative != 0 { return Double.nan }
while i > 0 {
var m: UInt16
switch i - 1 {
case 0:
m = _mantissa.0
break
case 1:
m = _mantissa.1
break
case 2:
m = _mantissa.2
break
case 3:
m = _mantissa.3
break
case 4:
m = _mantissa.4
break
case 5:
m = _mantissa.5
break
case 6:
m = _mantissa.6
break
case 7:
m = _mantissa.7
break
default:
fatalError()
}
d = d * 65536.0 + Double(m)
i -= 1
}
if _exponent < 0 {
i = UInt32(-_exponent)
while i > 0 {
d = d / 10.0
i -= 1
}
} else {
i = UInt32(_exponent)
while i > 0 {
d = d * 10.0
i -= 1
}
}
return _isNegative != 0 ? -d : d
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment