@WebDev921

Как сохранить нули после запятой в типе float64?

Например, мы отправялем POST запросом некий джисон
{"type": "test", "id": "testID", "value": 123.00}
И нужно просто вернуть его в ответе
Распаковываем json в структуру
type testStruct struct {
	ID    string  `json:"id"`             
	Type string  `json:"type"`           
	Value float64 `json:"value,omitempty"` 
}
json.Unmarshal(buf.Bytes(), &testStruct)

Проводим манипуляции и затем обратно в json
json.Marshal(testStruct)
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
w.Write(resp)

И получаем в ответе
{"type": "test", "id": "testID", "value": 123}
Вопрос, как сделать чтоб сохранить нули после запятой?

Если отправить
{"type": "test", "id": "testID", "value": 123.25}
То, соответственно в ответе останутся эти .25
{"type": "test", "id": "testID", "value": 123.25}
  • Вопрос задан
  • 224 просмотра
Решения вопроса 2
Это про валюту? Ее нельзя представлять при помощи Float64. Это противопоказано в любых ЯП.

Просто используй строку.
Для работы с валютой есть пакеты. Допустим, см. здесь.
Ответ написан
Комментировать
Если тип поля сделать json.RawMessage, то оно не будет меняться. Удобно, когда вам не нужно само число, но надо чтобы оно просто сохранилось при приеме-передаче структур.

https://go.dev/play/p/egy2GXVB-5p

код
package main

import (
	"encoding/json"
	"fmt"
)

type testStruct struct {
	ID    string          `json:"id"`
	Type  string          `json:"type"`
	Value json.RawMessage `json:"value,omitempty"`
}

func main() {
	var msg testStruct

	json.Unmarshal([]byte(`{"type": "test", "id": "testID", "value": 123.00}`), &msg)

	output, _ := json.Marshal(msg)

	fmt.Println(string(output))
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Передавай строкой
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы