Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

計算した値を四捨五入するのをやめられますか #535

Open
kochigami opened this issue Aug 6, 2017 · 7 comments
Open

計算した値を四捨五入するのをやめられますか #535

kochigami opened this issue Aug 6, 2017 · 7 comments

Comments

@kochigami
Copy link
Contributor

pythonだと、
1.50199099766e+18 のように表示されるのですが、
euslispだと、
1.501991e+18 のようになります。

やりたいことは、
時間を記録して、ファイルに書き込むことなので、
今の所は計算をせず、sec, nsec両方取り出してファイルに書き込もうと思います。

4.E2-irteusgl$ setq time (ros::time-now)
#<ros::time #X57bc058 1502011442.658>
5.E2-irteusgl$ send time :sec
1502011442
6.E2-irteusgl$ send time :nsec
658569503
7.E2-irteusgl$ setq answer (+ (* (send time :sec) 1000000000.0) (send time :nsec))
1.502011e+18
8.E2-irteusgl$ answer
1.502011e+18
9.E2-irteusgl$ send time :now
#<ros::time #X57bc058 1502011531.816>

@k-okada
Copy link
Member

k-okada commented Aug 6, 2017 via email

@kochigami
Copy link
Contributor Author

ご教示ありがとうございました。

もう一点、もしよろしければご教示ください。
(format t "~32,16f~%" (/ (send a :to-nsec) 1000000000.0)) の値をそのまま別の変数に代入したいのですが、できますでしょうか。
今は、記録をまとめて、string メッセージにして、
トピックに乗せて、それをファイルに書くようにしています・・・

22.E4-irteusgl$ (setq time_and_str (format nil "~a, ~a" (format t "~32,16f~%" (/ (send a :to-nsec) 1000000000.0)) "hoge"))
     1502019885.0964641571044922
"nil, hoge"
23.E4-irteusgl$ time_and_str
"nil, hoge"

@k-okada
Copy link
Member

k-okada commented Aug 6, 2017 via email

@kochigami
Copy link
Contributor Author

ご教示ありがとうございました。

format t/ nil の違いがいまいち分かっていないので、
勉強します。

@k-okada
Copy link
Member

k-okada commented Aug 7, 2017 via email

@kochigami kochigami reopened this Aug 15, 2017
@kochigami
Copy link
Contributor Author

すみません、今度はファイルに書き込んだ値を、
プログラムで読み込むときにまとめられるのをやめたいのですが、方法が分かりません。

たくさんファイルに書いてある数の大きさを比べたいのですが、
まとめられてしまっていて、全て同じ大きさと出てしまい困っています。

setq time 1502154610.7192630767822266
1.502155e+09

(setq time (format nil "~32,16f" time))
"     1502154610.7192630767822266"
read-from-string time
1.502155e+09

tmp.l

    1502154610.7192630767822266 help_me
(with-open-file (s "tmp.l" :direction :input)(while (setq b (read s nil))(print b)))
1.502155e+09
help_me
nil

@YoheiKakiuchi
Copy link
Member

以下のような感じで、プリントXXXe+ZZZと同じように表示されていても、
イコールではなくて、表示桁数を増やせば正しい値が入っているので、
formatで必要な桁数を書きだせば、読み込んだ後で比較できると思います。

(setq timea 1502154610.7192630767822266)
1.502155e+09
(setq str (format nil "~32,16f" timea))
"     1502154610.7192630767822266"
(setq timea-str (read-from-string str))
1.502155e+09

(setq timeb 1502154610.719264)
1.502155e+09
(setq str (format nil "~32,16f" timeb))
"     1502154610.7192640304565430"
(setq timeb-str (read-from-string str))
1.502155e+09

(= timeb timeb-str)
t
(= timea timea-str)
t
(= timea timeb)
nil
(= timea-str timeb-str)
nil
(- timea timeb)
-9.536743e-07
(- timea-str timeb-str)
-9.536743e-07

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants