SG

不良率をppm表記する

> // ppm(parts per million)
[<Measure>]
type ppm

// 不良率(ppm)の計算  不良数 * 1000000 / 製造数
// 単位をつけるときは LanguagePrimitives モジュールの関数を使用する
let calcPpm manufacture defective = 
    LanguagePrimitives.FloatWithMeasure<ppm> (float defective * 1000000. / float manufacture)
;;

[<Measure>]
type ppm
val calcPpm : int -> int -> float<ppm>

> // 500万台生産したけど、12万台の不良品があった
calcPpm 5000000 120000
|> printfn "不良率 : %A";;
不良率 : 24000.0
val it : unit = ()
> // 実行時には単位が失われるため、明示的に記述しなくてはならない
calcPpm 5000000 120000
|> printfn "不良率 : %A ppm";;
不良率 : 24000.0 ppm
val it : unit = ()
>