quark_float.go 1.8 KB

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