mirror of https://github.com/periph/devices
devices: move units code to units.go
No functional change. I plan to add more units, and eventually this could make sense to split it off into its own package. For now split it into its own source file.pull/1/head
parent
9e66c6ec1b
commit
dd32a7900e
@ -0,0 +1,91 @@
|
|||||||
|
// Copyright 2016 The Periph Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed under the Apache License, Version 2.0
|
||||||
|
// that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
package devices
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Milli is a fixed point value with 0.001 precision.
|
||||||
|
type Milli int32
|
||||||
|
|
||||||
|
// Float64 returns the value as float64 with 0.001 precision.
|
||||||
|
func (m Milli) Float64() float64 {
|
||||||
|
return float64(m) * .001
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the value formatted as a string.
|
||||||
|
func (m Milli) String() string {
|
||||||
|
d := m % 1000
|
||||||
|
if d < 0 {
|
||||||
|
d = -d
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%d.%03d", m/1000, d)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Celsius is a temperature at a precision of 0.001°C.
|
||||||
|
//
|
||||||
|
// Expected range is [-273150, >1000000]
|
||||||
|
type Celsius Milli
|
||||||
|
|
||||||
|
// Float64 returns the value as float64 with 0.001 precision.
|
||||||
|
func (c Celsius) Float64() float64 {
|
||||||
|
return Milli(c).Float64()
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the temperature formatted as a string.
|
||||||
|
func (c Celsius) String() string {
|
||||||
|
return Milli(c).String() + "°C"
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToF returns the temperature as Fahrenheit, a unit used in the United States.
|
||||||
|
func (c Celsius) ToF() Fahrenheit {
|
||||||
|
return Fahrenheit((c*9+2)/5 + 32000)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fahrenheit is an unsound unit used in the United States.
|
||||||
|
type Fahrenheit Milli
|
||||||
|
|
||||||
|
// Float64 returns the value as float64 with 0.001 precision.
|
||||||
|
func (f Fahrenheit) Float64() float64 {
|
||||||
|
return Milli(f).Float64()
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the temperature formatted as a string.
|
||||||
|
func (f Fahrenheit) String() string {
|
||||||
|
return Milli(f).String() + "°F"
|
||||||
|
}
|
||||||
|
|
||||||
|
// KPascal is pressure at precision of 1Pa.
|
||||||
|
//
|
||||||
|
// Expected range is [0, >1000000].
|
||||||
|
type KPascal Milli
|
||||||
|
|
||||||
|
// Float64 returns the value as float64 with 0.001 precision.
|
||||||
|
func (k KPascal) Float64() float64 {
|
||||||
|
return Milli(k).Float64()
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the pressure formatted as a string.
|
||||||
|
func (k KPascal) String() string {
|
||||||
|
return Milli(k).String() + "KPa"
|
||||||
|
}
|
||||||
|
|
||||||
|
// RelativeHumidity is humidity level in %rH with 0.01%rH precision.
|
||||||
|
type RelativeHumidity int32
|
||||||
|
|
||||||
|
// Float64 returns the value in %.
|
||||||
|
func (r RelativeHumidity) Float64() float64 {
|
||||||
|
return float64(r) * .01
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the humidity formatted as a string.
|
||||||
|
func (r RelativeHumidity) String() string {
|
||||||
|
m := r % 100
|
||||||
|
if m < 0 {
|
||||||
|
m = -m
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%d.%02d%%rH", r/100, m)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue