53 lines
585 B
Go
53 lines
585 B
Go
|
|
package main
|
||
|
|
|
||
|
|
func f() float64 {
|
||
|
|
return 1.0
|
||
|
|
}
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
var v = f()
|
||
|
|
const n = 7 // digits printed
|
||
|
|
var buf [n + 7]byte
|
||
|
|
buf[0] = '+'
|
||
|
|
e := 0 // exp
|
||
|
|
if v == 0 {
|
||
|
|
if 1/v < 0 {
|
||
|
|
buf[0] = '-'
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
if v < 0 {
|
||
|
|
v = -v
|
||
|
|
buf[0] = '-'
|
||
|
|
}
|
||
|
|
|
||
|
|
// normalize
|
||
|
|
for v >= 10 {
|
||
|
|
e++
|
||
|
|
v /= 10
|
||
|
|
}
|
||
|
|
for v < 1 {
|
||
|
|
e--
|
||
|
|
v *= 10
|
||
|
|
}
|
||
|
|
|
||
|
|
// round
|
||
|
|
h := 5.0
|
||
|
|
for i := 0; i < n; i++ {
|
||
|
|
h /= 10
|
||
|
|
}
|
||
|
|
v += h
|
||
|
|
if v >= 10 {
|
||
|
|
e++
|
||
|
|
v /= 10
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// format +d.dddd+edd
|
||
|
|
for i := 0; i < n; i++ {
|
||
|
|
s := int(v)
|
||
|
|
buf[i+2] = byte(s + '0')
|
||
|
|
v -= float64(s)
|
||
|
|
v *= 10
|
||
|
|
}
|
||
|
|
}
|