2015-11-22 1 views
4

У меня есть 4 значения float (startLat, startLon, endLat, endLon) в go. Я хочу добавить (заменить) эти значения ниже строки:Преобразование float в строку в go lang в соответствии с требуемым форматом.

var etaString = []byte(`{"start_latitude":"` + startLat + `","start_longitude":"` + startLon + `","end_latitude":"` + endLat + `","end_longitude":"` + endLon }`) 

Я должен типаж их в строку, прежде чем делать это.

startLat := strconv.FormatFloat(o.Coordinate.Longitude, 'g', 1, 64) 

Однако, когда я делаю это, я получаю значения этих параметров, как "4e+01 -1e+02 4e+01 -1e+02" Но я просто хочу что-то вроде этого: «64,2345».

Как я могу это достичь? ТИА :)

ответ

3

Package strconv

импорта "StrConv">func FormatFloat

func FormatFloat(f float64, fmt byte, prec, bitSize int) string 

FormatFloat преобразует число с плавающей точкой F в строку, в соответствии с форматом FMT и точности PREC. Он округляет результат , считая, что оригинал был получен из значения с плавающей запятой бит бит бит (32 для float32, 64 для float64).

Формат FMT является одним из 'B' (-ddddp ± ддд, двоичный показатель), 'е' (-d.dddde ± дд, десятичное показателем), 'E' (± -d.ddddE dd, десятичный показатель ), 'f' (-ddd.dddd, нет показателя), 'g' ('e' для больших показателей, 'f' в противном случае), или 'G' ('E' для больших экспонентов , 'f' в противном случае).

Прецизионный прецизионный контроль количества цифр (за исключением показателя ), напечатанного форматами 'e', ​​'E', 'f', 'g' и 'G'. Для 'e', ​​ 'E', а 'f' - это число цифр после десятичной точки. Для 'g' и 'G' это общее количество цифр. Специальная точность -1 использует наименьшее количество цифр, необходимых для того, чтобы ParseFloat точно .

Использовать точность -1, а не 1. Используйте формат f, а не g, чтобы избежать экспоненциальной формы для больших экспонентов (см. Комментарий HectorJ's).

startLat := strconv.FormatFloat(o.Coordinate.Longitude, 'f', -1, 64)

Например,

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 
    f := 64.2345 
    s := strconv.FormatFloat(f, 'g', 1, 64) 
    fmt.Println(s) 
    s = strconv.FormatFloat(f, 'f', -1, 64) 
    fmt.Println(s) 
} 

Выход:

6e+01 
64.2345 
+1

Если вы хотите быть уверены, что никогда не получить экспоненту, а также использовать 'F' флаг вместо «г ' – HectorJ

+0

@HectorJ: Хорошая точка. Исправлена. – peterSO