Умножьте * float32 и значение int - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть 2 поля, которые я должен умножить.Одно из них - поле *float32, а другое - поле int.Как я могу умножить эти поля?

var totalPrice *float32
var price *float32
var volume int

этот код не работает.Я получаю сообщение об ошибке ... mismatched types *float32 ...

totalPrice = price * volume

1 Ответ

1 голос
/ 27 апреля 2019

Вам нужно преобразовать , используя преобразование типов, как объяснено здесь . В этом случае, как подчеркивает mkopriva в своем комментарии, вы должны конвертировать volume значение переменной в float32.

Также позволяет показать способ работы со значениями nil, имеющими значение на уровне приложения, для этого я написал float32PtrToFloat (* float32, float32) со вторым параметром, который позволяет вам указать, какое значение должно быть взято вместо нуля

Предполагая, что нулевое значение переводится в нулевое значение, здесь приведен полный пример

package main

import (
    "fmt"
)

func main() {
    var totalPrice *float32
    var price *float32
    var volume int

    var total = float32PtrToFloat(price, 0) * float32(volume)
    totalPrice = &total
    fmt.Println(*totalPrice)

}

func float32PtrToFloat(price *float32, valueIfNil float32) float32 {
    if price == nil {
        return valueIfNil
    } else {
        return *price
    }
}

И при личном чтении, следуя совету JimB, старайтесь не использовать числа с плавающей запятой для значений валюты, поскольку арифметика с плавающей запятой ненадежна. Вместо этого используйте целочисленные значения, используя 1 в качестве нижнего значения в текущей валюте, например:

  • 1 = 1 копейка (или)
  • 1 = 1 цент (или)
  • 1 = 1 сентаво (в моем случае)
...