teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/11/28 01:12

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -7,4 +7,30 @@
7
7
  本来の精度という意味ではfloatの精度は7桁程度ですので、doubleから変換した場合精度は落ちます。しかしながらC#側でdouble型変数へ設定している値がもともと7桁程度の精度しかないなら、実質上精度落ちはないと考えてもよいでしょう。
8
8
 
9
9
  ---
10
- なお、Processingではdouble型を扱えないと思っておられるのでしょうか?もしそうだとするとそれは勘違いです。Processing(Javaバージョン)では多くのAPIはfloat型で設計されてますし、Javaと異なり浮動小数点数のリテラルはfloat型です(Javaはdoubleがリテラルのデフォルト)。しかしながらProcessingでもdouble型は使えます。精度落ちを気にするのでしたらProcessing側でもdoubleを用いればよいと思います。
10
+ なお、Processingではdouble型を扱えないと思っておられるのでしょうか?もしそうだとするとそれは勘違いです。Processing(Javaバージョン)では多くのAPIはfloat型で設計されてますし、Javaと異なり浮動小数点数のリテラルはfloat型です(Javaはdoubleがリテラルのデフォルト)。しかしながらProcessingでもdouble型は使えます。精度落ちを気にするのでしたらProcessing側でもdoubleを用いればよいと思います。
11
+
12
+ ---
13
+ 追記:hskさんにコメントいただいたので追記します。
14
+
15
+ > double(rcvMSG[0])はダメでした。
16
+
17
+ ここが質問者さんが解決したい肝心の点でしたね!見落としてました。この書き方はC++っぽい雰囲気ですが、Processing(つまりJava)ではキャスト構文はT(expression)とはかけず、(T)(expression)と書きます。しかし文字列から数値への変換はキャストでは書けずメソッドを使う必要があります。hskさんコメントにあるようにProcessingの標準機能としては`parseFloat(文字列式)`が使えますが`parseDouble(文字列式)`は提供されていません。このような場合はJavaの機能を呼び出す必要があります。DoubleはJavaではdouble型(primitive型の一種)をクラスとしてラップするためのクラスですがそこに色々なユーティリティー関数が定義されています。parseDoubleもその一つです。
18
+
19
+ `double d = Double.parseDouble(rcvMSG[0]);`
20
+
21
+ 以下は蛇足:
22
+
23
+ Doubleクラスはjava.langパッケージにあるのですが、Javaではjava.langパッケージのクラスは明示的なimportなしに使えます。Processingでも同様に省略できるようですね。しかしProcessingの標準機能にないJavaのクラスを使う必要がある場合、そのクラスがjava.langにないクラスの場合は明示的にimportすれば使えるということも覚えておくとよいと思います。このくらいまで仕組みが分かっているとProcessingでどうコードを書けばよいか分かり易くなると思います。
24
+
25
+ 例:java.utilパッケージのList/ArrayListを使うようなケース
26
+ ```Processing
27
+ import java.util.List;
28
+ import java.util.ArrayList;
29
+
30
+ void setup() {
31
+ List<String> list = new ArrayList();
32
+ list.add("a");
33
+ list.add("a");
34
+ }
35
+ ...
36
+ ```