[xyzzy:09203] formatの動作
- Subject: [xyzzy:09203] formatの動作
- From: "southly" <southly@xxxxxxxxxxxx>
- X-mailer: KaMailV3/0.0.1.4beta5 xyzzy-0.2.2.235 (windows-xp)
こんにちは。
NANRIです。
formatの動作を調べていて、期待する動きにならない部分を見つけました。
一つ目は"~F"です。
"~@F"と、@つきで指定すると正の数であっても符号がつくはずですが、つきませ
ん。パラメータをひとつでも指定すると符号がつくようになります。
(format nil "~@F" 123.45)
=>"123.45" ; "+123.45"になって欲しい
(format nil "~0@F" 123.45)
=>"+123.5"
もうひとつ"~E"にて、パラメータを指定していないと指数表記にならず、固定小
数点表記で表示されてしまいます。パラメータを指定すれば指数表記になります
が、ちょっと有効桁が多すぎる気がします。
(format nil "~E" 123.45)
=>"123.45" ; "1.2345e+2"になって欲しい
(format nil "~0E" 123.45)
=>"1.23450e+2" ; 0は余計では?
応急処置的なパッチを作ってみました。
CLHSのサンプル
http://www.lispworks.com/documentation/HyperSpec/Body/22_ck.htm
の範囲では期待する動作をすることを確認しています。
以上よろしくお願いします。
--
NANRI
southly@xxxxxxxxxxxx
http://raido.sakura.ne.jp/southly/rn/
# [xyzzy:09198] の件は直していただいたみたいでありがとうございました。
--- lprint.cc~ Sun Mar 10 04:43:29 2002
+++ lprint.cc Wed Nov 15 00:03:44 2006
@@ -2397,6 +2397,7 @@
if (!param_is_given (0) && !param_is_given (1))
{
print_control pc (10);
+ if (atsign && f.sign > 0) stream.add('+');
print_flonum (stream, pc, lnumber);
return;
}
@@ -2528,18 +2529,18 @@
return;
}
- if (!param_is_given (0) && !param_is_given (1) && !param_is_given (2))
- {
- print_control pc (10);
- print_flonum (stream, pc, lnumber);
- return;
- }
+// if (!param_is_given (0) && !param_is_given (1) && !param_is_given (2))
+// {
+// print_control pc (10);
+// print_flonum (stream, pc, lnumber);
+// return;
+// }
if (!param_is_given (2))
e = exp_width (f.exp - k + 1);
if (!param_is_given (1))
- d = f.be - f.b0;
+ d = f.be - f.b0 - 1;
if (k > 0)
d = max (d, k - 1);
else if (k < 0)