bgUnits.swift 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // Units.swift
  3. // LoopFollow
  4. //
  5. // Created by Jon Fawcett on 6/22/20.
  6. // Copyright © 2020 Jon Fawcett. All rights reserved.
  7. //
  8. import Foundation
  9. class bgUnits {
  10. static func toDisplayUnits(_ value: String) -> String {
  11. let numberFormatter = NumberFormatter()
  12. numberFormatter.numberStyle = .decimal
  13. if UserDefaultsRepository.units.value == "mg/dL" {
  14. numberFormatter.maximumFractionDigits = 0 // No decimal places for mg/dL
  15. } else {
  16. numberFormatter.maximumFractionDigits = 1 // Always one decimal place for mmol/L
  17. numberFormatter.minimumFractionDigits = 1 // This ensures even .0 is displayed
  18. }
  19. numberFormatter.locale = Locale.current
  20. if let number = Float(value) {
  21. if UserDefaultsRepository.units.value == "mg/dL" {
  22. let numberValue = NSNumber(value: number)
  23. return numberFormatter.string(from: numberValue) ?? value
  24. } else {
  25. let mmolValue = Double(number) * GlucoseConversion.mgDlToMmolL // Convert number to Double
  26. let numberValue = NSNumber(value: mmolValue)
  27. return numberFormatter.string(from: numberValue) ?? value
  28. }
  29. }
  30. return value
  31. }
  32. static func removePeriodAndCommaForBadge(_ value: String) -> String {
  33. var modifiedValue = value
  34. modifiedValue = modifiedValue.replacingOccurrences(of: ".", with: "")
  35. modifiedValue = modifiedValue.replacingOccurrences(of: ",", with: "")
  36. return modifiedValue
  37. }
  38. }
  39. extension Float {
  40. // remove the decimal part of the float if it is ".0" and trim whitespaces
  41. var cleanValue: String {
  42. return self.truncatingRemainder(dividingBy: 1) == 0
  43. ? String(format: "%5.0f", self).trimmingCharacters(in: CharacterSet.whitespaces)
  44. : String(format: "%5.1f", self).trimmingCharacters(in: CharacterSet.whitespaces)
  45. }
  46. var roundTo3f: Float {
  47. return round(to: 3)
  48. }
  49. func round(to places: Int) -> Float {
  50. let divisor = pow(10.0, Float(places))
  51. return (divisor * self).rounded() / divisor
  52. }
  53. }