[Silverlight2]doubleの比較ではまったお話し
とあるアプリケーションが、MacのSafariで正常に動作しないという報告がクライアントからありました。
多少条件判定処理が多いくらいで、それ以外はどう考えてもごくごく普通の処理をしているだけの個所なのに、確かに動作がおかしかったので、前回のエントリーで書いたSilverlightとJavaScriptの連携を使ってログを吐きつつ調査をしてみたところ、恐ろしいことに気づいてしまいました。
double型って==演算子で比較しちゃダメなの?(´・ω・`)
明らかに等しいdouble値の==演算子の比較が常にfalseになっているようだったので、試しにEqualsで比較するようにしてみたら、正常に動作するようになりました。
確かにEqualsメソッドもあるけど、別に==で比較しても良いんじゃないの?ヽ(`Д´)ノ
何も明らかに等しい値を、しかもMacのSafariだけでスルーしなくても良いと思う(´;ω;`)
ということで、今後はdouble型の比較には、==演算子じゃなくてEqualsメソッドを使いましょう、というお話しでした。
でも忘れちゃいそうだなー( ;^ω^)
【おまけ】
今回データのトレースに使ったSilverlightとJavaScriptの連携
Silverlight側では、こんなメソッドを用意しました。
public void Trace(string str)
{
try
{
ScriptObject jsFunc =
(ScriptObject)HtmlPage.Window.GetProperty("trace");
if(jsFunc != null)
{
jsFunc.InvokeSelf(str);
}
}catch{}
}
そしてHTML側のheadに、JavaScriptのファンクションを、
<script language="javascript">
function trace(str) {
var trace= document.getElementById("trace");
trace.innerHTML += str + "<br/>";
}
<script>
bodyにdivタグを一つ追加しました。
<!-- Silverlightアプリケーションの下あたり --> <div id="trace"></div>
あとはTraceメソッドを呼び出して文字列を渡してやれば、どんどんブラウザ内に出力してくれます。
でも、ブラウザの表示エリアもどんどん伸びて行ってしまうので、呼び出し過ぎには注意です(^^;
トラックバック(0)
このブログ記事を参照しているブログ一覧: [Silverlight2]doubleの比較ではまったお話し
このブログ記事に対するトラックバックURL: http://ushi.donburi.net/mt/mt-tb.cgi/62



コメントする