なでしこに限りませんが・・・1つ1つ見てゆくと、どれも正常です。
型が緩い言語で、数値にしか適用できない演算子を適用して、型を暗黙的に変換するというのは、わりとポピュラーな方法です(大抵は、0に足したり、0を引いたりする)。演算される前に、暗黙的に型が変換されて、結果もその型に合ったものになります。演算結果を適用した結果は、数値になりますので、数値の0との比較は期待通りに動きます。
その前は数値だったとか、形式指定使ったとか関係なく、比較している時点では、「15.123」と「5.432」の文字列比較です。
文字列同士では、最初の文字から順に文字コード(か、辞書順)が比較されてゆきますから、「1」と「5」を比較して、「5」の方が大きいというのは、あなたが期待した動作とは違うかもしれませんが、正常な動作です。あくまでも、たまたま数値に見える、文字列同士の比較になります。
10より大きな数値で検証する場合でも、判定距離120.5と距離Aを50.1のように、文字列と数値での比較で結果が逆転する関係しないと、「たまたま数値比較の結果と同じになるため正しく見えて」しまいます(同じ桁の数値は、検証に使う値としては不適切。)
結局のところ、数値として比較したい場合は、何らかの方法で(暗黙的でも明示的でも)必ず数値に変換する必要があります。
(もし、文字列と数値の比較演算子が異なるなら、数値用の比較演算子を使うのが簡単ですが、なでしこには無いかもしれません)
これを言語として無理にしようとすると、数値に変換可能な文字列同士の比較は、常に数値比較するように変更することになると思いますが、おそらくは、どちらかというと不便になるのではないかと思います。