単位形式
単位形式は、時間間隔、長さや距離、質量や重量など、数値の単位の表示とフォーマットを制御します。
単位形式の理解
単位形式がない場合、数値は単位タイプの全名を表示します。例えば:
put 1 mm --> 1 millimeter
put 3 kg --> 3 kilograms
多くの場合、デフォルトの振る舞いは十分ですが、フォーマットをより制御する必要がある場合もあります。例えば:
put 4425 mins --> 4425 minutes
put 4425 mins as hrs --> 73.75 hours
put 4425 mins as days --> 3.072917 days
単位形式を使用しない場合、4425分を分、または
時間、または
日として表示することしかできません。より良い形式は3日1時間45分かもしれません、これは理解しやすいです。これを達成するために、以下の形式のいずれかを適用できます:
"[day] days [hr] hours [min] minutes"
"[days] @ [hours] @ [minutes] @"
単位形式の要素
単位形式はシンプルからかなり複雑まで様々です。それらを理解する最も簡単な方法は、基本から始めて、必要に応じて他のオプションを追加することです。
基本事項
最も基本的な単位形式は、テキスト文字列で、最終結果中で数値に置き換えられる1つ以上の単位トークン、または単位名が含まれています。単数または複数の単位名を使用することができ、大文字小文字は問題ありません。名前は単位タイプを識別する必要があります。例えば:
put 5 kg -->5 kilograms
put 5 kg with format "[KG] kg" --> 5 kg
put 5 kg with format "[Kilogram] kg" --> 5 kg
put 5 kg with format "[kilograms] kg" --> 5 kg
"@"トークンはより正確な構文を必要とします。詳細は、単位名(@トークン)をご覧ください。
単位形式に複数の単位名が含まれている場合、SenseTalkは左から右へと動作し、それぞれのトークンを数値の合計がそのタイプの単位の整数部分となるように置き換えます。次の例では、SenseTalkは:
- 483秒が8.05分であると判断します。
[min]
トークンを整数部分8で置き換えます。- 余りの0.05分、つまり3秒を次のトークンに割り当てます。
put 483 secs format "[min] minutes [s] seconds" --> 8 minutes 3 seconds
左から右への値の割り当ては、単位フォーマットシステムが、大きい単位から始まり、次第に小さくなる単位で形成された値を生成できることを意味します。
トークン内の単位名
前述の通り、単位トークン、または単位名の構文は柔軟です。単数名、複数名、または略語を含めることができます。例えば、時間を表す単位トークンを[hours]
または[hour]
または[hrs]
または[hr]
と書くことができます。次の単位形式文字列は少し異なって見えますが、同じフォーマットを適用します。
"[hr]:[min]:[sec]"
"[hours]:[minutes]:[seconds]"
...結果として
3 seconds --> 0:0:3
521957 seconds --> 144:59:17
数値形式
数値形式は、整数部分または小数部分、桁数や小数点以下の位数を制御することができます。次の例では、[seconds .]
内のドットは、秒単位の小数部分を表示することを可能にします:
"[hours]:[minutes]:[seconds .]"
...結果として
63.6487 seconds --> 0:1:3.6487
ドットを使用できるのは、フォーマットの最終単位トークンだけです。これは、値の残りがより大きな単位トークンまたはタイプに割り当てられた後の残りの値です。"."は、0.######
の数値形式を使用することと同じです。
[seconds .###]
内の.###
は、秒単位の小数部分を三桁まで表示します:
"[hours]:[minutes]:[seconds .###]"
...結果として
63.6487 seconds --> 0:1:3.649
[minutes 00]
内の00
は、この単位タイプに対して2桁を表示し、ゼロ分であっても表示します。[seconds 00]
内の00.000
は、小数点前に2桁、小数点後に3桁を表示し、秒単位の小数部分またはゼロを表示します:
"[hours]:[minutes 00]:[seconds 00.000]"
...結果として
63.6487 seconds —> 0:01:03.649
2.4 seconds —> 0:00:02.400
小数部分のフォーマットは、フォーマットの最終単位トークンにのみ適用できます。これは、値の残りがより大きな単位トークンまたはタイプに割り当てられた後の残りの値です。
また、単位形式のグローバルプロパティを使用して、一つ以上の単位タイプの数値形式を設定することもできます。
デフォルトの数値形式
単位トークンが数値形式を含まない場合、デフォルトは0
となります。このデフォルトを現在のトークンおよびすべての後続トークンで上書きするには、アスタリスク(*
)を使用します:
"[hours 00*]:[minutes]:[seconds]"
...これはデフォルトの数値形式を00に設定し、次のように等価です:
"[hours 00]:[minutes 00]:[seconds 00]"
単位名(@tokens)
(@
)記号は、単位形式内の単位名トークンの後に表示される特殊なトークンです。形式が適用されると、この特殊トークンは自動的に単位名の正しい単数形または複数形に置き換えられます:
"[hours] @ and [minutes] @"
...結果として
347 minutes --> 5 hours and 47 minutes
12 minutes --> 0 hours and 12 minutes
60 minutes --> 1 hour and 0 minutes
さらに、(@
)記号の前にあるトークンの単位名は、値に適用され、省略形や大文字化の変更も含まれます:
"[hr] @ and [Minutes] @"
...結果として
347 minutes --> 5 hrs and 47 Minutes
12 minutes --> 0 hrs and 12 Minutes
61 minutes --> 1 hr and 1 Minute
条件部分
単位トークン内の疑問符は、条件付きの単位を示します。これにより、値がゼロの場合に単位を抑制することができます。例えば:
"[hours ?] @ [minutes?] @"
...結果として
347 minutes --> 5 hours 47 minutes
12 minutes --> 12 minutes
60 minutes --> 1 hour
この形式が1分未満の数値に適用された場合、両方の単位が抑制され、結果は空の文字列になります。
条件ユニットの値がゼロである場合、そのユニットに続くテキストも抑制されます:
"[hours?] grueling @ and [minutes] @"
...という結果になります
347分 --> 5 grueling hours and 47分
75分 --> 1 grueling hour and 15分
12分 --> 12分