我正在讀取處理中的序列值。一個例子:什麼使這個簡單的處理算法失敗?
...
297.5
297.1
297.1
...
這些數字不會比這裏顯示的變化多得多。
然後,我運行下面的代碼:
if (val > 100) {
println(val);
}
它打印正是我上面寫的。
然後我運行此代碼:
if (val > 100) {
val -= 230;
val *= 2;
println(val);
}
它打印出大相徑庭的數字:
...
-189.59998
136.0
-188.0
135.0
-190.0
...
思考的東西是扭曲我的數學(但如何?!),我減少了我的代碼對此:
if (val > 100) {
val -= 230;
println(val);
}
它打印,如預期,67ish。
val *= 2
有什麼問題?
我能想到的唯一的事情就是我爲'float
'數據類型分配的內存'溢出',所以它'滾動'爲負數......但這怎麼可能?我認爲Processing只是Java的一個薄弱環節。
全碼
import processing.serial.*;
Serial s;
float val;
void setup() {
size(600, 400);
String portName = Serial.list()[1];
s = new Serial(this, portName, 9600);
s.bufferUntil('\n');
}
void draw() {
if (s.available() > 0) {
try {
val = Float.parseFloat(s.readStringUntil('\n').trim());
}
catch (Exception e) {
}
if (val > 100) {
val -= 230;
val = val * 2.0;
println(val);
}
}
}
粘貼輸入輸出&
我在下面的站點粘貼輸出的刪節版。第一種是沒有算術的輸出;然後有一行###
,然後執行算術後的值。
http://pastebin.com/raw.php?i=Du7TmZFv
只是一個猜測,但怎麼樣val * = 2.0; –
那是我的第一個念頭 - 不幸的是,沒有雪茄! :( – j6m8
浮動VAL = 297.1f; \t \t VAL - = 230; \t VAL * = 2; \t的System.out.println(VAL);爲我工作和結果是134.20001, – Jabir