- 締切済み
文字コードと小数変換
初歩的な質問かもしれませんが2つほどお願いします。 1.jsファイルの文字コード htmlファイルではheadにシフトJIS指定で記述したのですがjsファイルでは何も指定せずに(指定できるのでしょうか?) 保存したらjsファイルの読み込み時に文字化けしてしまいました。 どちらもWindowsのメモ帳で作成保存したのですがjsファイルの文字コードはどうなるのでしょうか? htmlのほうをEUC指定すると文字化けはおきないのですがフォントがずれるのであまり使いたくありません。 2.小数変換 小数第何位を四捨五入と指定できる関数というのはあるのでしょうか? Math.floorやMath.ceilでは整数値になってしまいます。 10^nで割ってから計算し直さないといけないのでしょうか?
- みんなの回答 (8)
- 専門家の回答
みんなの回答
昨晩は酒を飲みながら訳の判らない回答をしていたようです。 まあ、次のような関数を考えていたということです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <title>Round</title> <meta http-equiv="Content-script-Type" content="type"> <script type="text/javascript"> function rounds(m, t) { return sgn(m)*Math.floor(Math.abs(m)*Math.pow(10,t-1)+0.5)/Math.pow(10,t-1); } function sgn(m) { return (m < 0) ? -1 : 1; } </script> <body> <script> <!-- document.write (rounds(-1.45, 2), "</br>"); //--> </script> </body> </html>
まあ、それよりも、バグを心配しています。 つまり、正と負の値の問題です。 -1.124 の場合、1.124 にして四捨五入。 その後、負なら-1を掛けないと・・・。 今、自宅で酒飲みながらで試せません。 しかし、通常は、四捨五入関数は作りますよね。 Math.sgn なんてありましたかね・・・。
- wp_
- ベストアンサー率54% (132/242)
>No.4の方 無粋なツッコミなので気に障ったらスルーしていただきたいのですが、 指数を指定するのであれば function rounds(m, t) { return Math.round(m*Math.pow(10,t-1))/Math.pow(10,t-1); } とした方が「小数点第何位で四捨五入」というのが分かりやすいかなぁと。 まぁそういう意味では引数がマイナスで小数点以下、正数の場合は上何桁目で四捨五入としたほうが可読性は高まりますけどこの辺は質問者様に努力していただくという方向でどうかよろしく。 ヒントとしてはtを正負逆にすることです。 それでは皆様よい年末を。
お礼
プログラムまでわざわざありがとうございます! 今回は負のエラーなどを気にするプログラムではないので この方法で試してみたいと思います。
var v=0; は、ゴミ!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <html> <title>Round</title> <meta http-equiv="Content-script-Type" content="type"> <script type="text/javascript"> var v=0; function rounds(m, t) { return Math.round(m*Math.pow(10,t))/Math.pow(10,t); } </script> <body> <script> <!-- document.write (rounds(1.154, 2), "</br>"); //--> </script> </body> </html> document.write (rounds(1.154, 0), "</br>");---->1 document.write (rounds(1.154, 1), "</br>");---->1.2 document.write (rounds(1.154, 2), "</br>");---->1.15 ここまではテストしました。
- wp_
- ベストアンサー率54% (132/242)
日本語おかしかったので自己ツッコミ >四捨五入は組み込まれていません。 小数点以下の四捨五入は(snip) ついでにソースでも。 var nn = 1.2345 nn_tmp = nn * 100; nn = Math.round(nn_tmp) / 100; // nn -> 1.23
- wp_
- ベストアンサー率54% (132/242)
>htmlのほうをEUC指定すると文字化けはおきないのですがフォントがずれるのであまり使いたくありません。 文字コードとフォントに関係はありません。 フォントが変わるのがイヤなのであればcssなどで明示的に指定すればよいです。 文字化けに関しては原因は別のところにある気がします。 <meta>やjsの読み込み部に間違いがないか確認するとよいかもしれません。 >10^nで割ってから計算し直さないといけないのでしょうか? そのとおり。四捨五入は組み込まれていません。 ロジックは自分で組むほかありません。 たかだか3ロジックくらいなのでそんなに手間ではないですよ。
>jsファイルの文字コード win・メモ帳は、文字コードが設定出来ません。 例えば、秀丸などのエディタでは、保存する際に エンコードの種類、改行コードの指定まで出来ます。 秀丸はシェアウェアですが、フリーでもいろいろありますので 検索してみてはいかがでしょうか? >2.小数変換. Math.round ← これだと四捨五入してくれます
お礼
やはりメモ帳ではムリですか~ Windowsのメモ帳は自動でシフトJISでのみ保存されると聞いたのですが jsファイルでは自動でEUCになってしまうということでしょうか?
お礼
この時期はお酒が入るのは仕方ありませんね(笑 いろいろなプログラムを載せていただき勉強になります。 ありがとうございます。