Merhaba,
Bugün ilginç bir problem yaşayıp uzun aramalar sonucu çözebildik. Logta aralıklarla akan java.lang.NumberFormatException: For input string: "�" hatası görüyorduk.
Stack trace şöyleydi:
java.lang.NumberFormatException: For input string: "�"at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1280)at java.lang.Double.valueOf(Double.java:486)at java.lang.Double.<init>(Double.java:578)...
Öncelikle problemi çok başka yerlerde aradık. "�" karakterleri UTF8 header'larına ait karakterler. Bir şekilde konfigürasyon dosyalarımızın encoding'i ile ilgili problem olabileceğini düşündük. Bu dosyalarla epey boğuştuktan sonra debug session'larımızdan birinde hatayı yakaladık. Hata demek haksızlık olur, hatalar zinciri diyelim :)
Öncelikle hatalı class içinde 2 double değişkeni birbirine bölüp yeni bir double elde ediyoruz:
double total = x / y;
Bölenimiz(y) bazen 0 gelebiliyormuş. Bu yüzden bir exception atılmıyor, bölüm değeri (total) NaN (Not A Number) olarak oluşuyor.
Sonrasında bu total değeri DecimalFormat ile formatlanıyor:
DecimalFormat df = new DecimalFormat("#.##");df.format(total);
Tataaam, alın size "�" :) Çözüm çok basit, bölme işleminde bölen için 0 olup olmama kontrolü.
Hiç yorum yok:
Yorum Gönder