quark_float.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // package quark_float -- кварк вещественное
  2. package quark_float
  3. import (
  4. "fmt"
  5. "strconv"
  6. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_base"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
  9. )
  10. // QFloat -- кварк вещественное
  11. type QFloat[M quark_val.CMod] struct {
  12. *quark_base.QBase[M, float64]
  13. }
  14. // NewQFloat -- создание фиксированного кварка вещественное
  15. func NewQFloat(val float64) *QFloat[quark_val.Fix] {
  16. optMass := quark_base.QBaseOptMass[quark_val.Fix, float64](8)
  17. optVal := quark_base.QBaseOptVal(val)
  18. sf := &QFloat[quark_val.Fix]{
  19. QBase: quark_base.NewQBase(optMass, optVal),
  20. }
  21. return sf
  22. }
  23. // NewQFloatMut -- создание мутабельного кварка вещественное
  24. func NewQFloatMut(val float64) *QFloat[quark_val.Mut] {
  25. optMass := quark_base.QBaseOptMass[quark_val.Mut, float64](8)
  26. optVal := quark_base.QBaseOptValMut(val)
  27. sf := &QFloat[quark_val.Mut]{
  28. QBase: quark_base.NewQBaseMut(optMass, optVal),
  29. }
  30. return sf
  31. }
  32. // Get -- возвращает хранимое значение
  33. func (sf *QFloat[M]) Get() float64 {
  34. return sf.Val().Get()
  35. }
  36. // Set -- устанавливает хранимое значение
  37. func Set(sf *QFloat[quark_val.Mut], val float64) {
  38. quark_val.Set(sf.Val(), val)
  39. }
  40. // FromStr -- устанавливает из строки
  41. func FromStr(sf *QFloat[quark_val.Mut], str string) {
  42. fVal, err := strconv.ParseFloat(str, 64)
  43. Hassert(err == nil, "QFloat.FromStr(): str=%q, err=\n\t%v", str, err)
  44. quark_val.Set(sf.Val(), fVal)
  45. }
  46. // ToStr -- конвертирует в строку
  47. func (sf *QFloat[M]) ToStr() string {
  48. return fmt.Sprint(sf.Get())
  49. }