Negatif Değer Döndüren Konum Boyutu - sayfa 2

 
NoLimitations :

Ayrıca bunu boşuna kullanmayı denedim. Muhtemelen DTS, gerçek değeri değil, görünüm için bir değerin doğruluğunu değiştirir mi? Başka seçenek göremiyorum.

Evet, bence dize, double içindeki değeri yazdırılabilir bir sürümü yapıyor, ancak değiştirmiyor. MQL'de nasıl yapılacağından emin değilim, ancak Java'da bir türden diğerine bir tür dönüştürmeyi zorlayabileceğinizi biliyorum (bu durumda, double'dan int'ye).

http://docs.Oracle.com/javase/specs/jls/se7/html/jls-5.html adresindeki Oracle dokümanlarından. Bu, sunulan kodun sadece küçük bir kısmıdır.

 // Casting conversion (5.4) of a float literal to
// type int. Without the cast operator, this would
// be a compile-time error, because this is a
// narrowing conversion (5.1.3):
int i = ( int ) 12.5 f;
// String conversion (5.4) of i's int value:
System. out .println( "(int)12.5f==" + i);

Senin durumunda, şöyle bir şey söyleyeceğine inanıyorum

 int intConvertedDouble = ( int ) valueYouGotItFrom;

Açıkçası, adları kodunuza daha iyi uyacak şekilde ayarlamanız gerekir.

http://www.studytonight.com/java/type-casting-in-java da orada yer alıyor. Java ve MQL'nin her ikisinin de C++ tabanlı olması gerektiği için bu size yardımcı olabilir.

 

@OP ve daha önce yayınlanan tüm MQL4 bağlantılarını okumanın yanı sıra bkz. Çiftlerle Çalışma ve PrintFormat

@ JD4 Java kodunu göndermenin ve Java özelliklerine başvurmanın OP'ye nasıl yardımcı olduğunu anlamıyorum. Ayrıca Java ve C++ benzer ancak C++ tabanlı olduğuna katılmıyorum

Her ne kadar yardımcı olmaya çalışıyor olsanız da, cevaplardan emin olmadığınız zamanlarda verdiğiniz cevapların çoğunun sadece yardım arayan insanların kafasını karıştırdığını düşünüyorum.

 
ydrol :

@OP ve daha önce yayınlanan tüm MQL4 bağlantılarını okumanın yanı sıra bkz. Çiftlerle Çalışma ve PrintFormat

@ JD4 Java kodunu göndermenin ve Java özelliklerine başvurmanın OP'ye nasıl yardımcı olduğunu anlamıyorum. Ayrıca Java ve C++ benzer ancak C++ tabanlı olduğuna katılmıyorum

Her ne kadar yardımcı olmaya çalışıyor olsanız da, cevaplardan emin olmadığınız zamanlarda verdiğiniz cevapların çoğunun sadece yardım arayan insanların kafasını karıştırdığını düşünüyorum.

C++ düşüncelerinizle ilgili olarak, https://www.mql5.com/en/docs/basis adresine bir göz atın. Tam orada yazıyor ve MQL4'ü daha çok MQL5 ( https://docs.mql4.com/mql4changes ) gibi olacak şekilde değiştirdikleri için burada da geçerli. Bilgi tabanıma gelince, hiçbir zaman uzman olduğumu iddia etmedim ve insanlara bir şey yazdığımda emin olmadığım bir şey olursa, en azından denediğimi, bazen kaçırabileceğimi bilmelerini sağlarım. Bir Chevy sürersem ve onunla sorun yaşarsam, orada oturup, yalnızca Fords üzerinde çalışan birinin tavsiyelerini, parası tam olarak doğru olmasa bile, yararlı bir tavsiyeyse indirim yapmayacağım. Ayrıca orada oturup yardımcı olmaya çalışıyorlarsa, yardım edebileceğinizi düşünmediklerini söylemeyeceğim.
 

Sanırım yazımı yanlış okudunuz. Mql4 OO kesinlikle c++ tabanlıdır. Buna bir itiraz olduğunu düşünmüyorum. Ben senin iddiana atıfta bulundum:

JD4 : Since Java and MQL are both supposed to be based on C++ , this might help you out.

ardından birçok Java referansı gelir. Söyledim -

ydrol : Ayrıca Java ve C++ benzer ancak C++ tabanlı olduğuna katılmıyorum

Özellikle Java referanslarınızdan bahsediyordum. Java bence c++ tabanlı değil.

Her durumda, ondalık sayıları kayan nokta ile temsil etme konusu, daha önce WHRoeder tarafından bahsedilen dizilerde birkaç kez ele alınmıştır.

OP iki ondalık basamağa yuvarlamak istiyor gibi görünüyor, ancak herhangi bir çıktı veya belirli örnekler göndermeden, gördükleri yuvarlama hatasının derecesi göz ardı edilebilir sanırım.

 
JD4 : Bunun için belge sayfasına göre değil. https://docs.mql4.com/math/mathround
NoLimitations : JD4 doğru, doküman sayfası en yakın tam sayıya yuvarlandığını söylüyor.

İkisi de yanlış. En yakın tam sayıya yuvarlar. alakasız Bir çift döndürür. 1 = 1.0 = 1.00 = 1.00000 = 1.00000000000000000000000000000000000 SONSUZ BAŞKALAR

Kayan nokta hakkında bilgi edinin. == işlenen. - MQL4 forumu



 

Sanırım WH'nin geri dönüp tekrar okuması gerekiyor, işlevin gerçekte ne yaptığını değil, sayfanın söylediğini söylüyordum. Ve bilgisayar programlama, veri türleri açısından (int) 1 != (double) 1.000000000 (ad infinitum) olan birkaç yerden biridir.


@ ydrol, MQL/Java/C++ ile ilgili ifadenizle niyetinizin yönünü kaçırdım. Java'nın bir programlama dili olarak kökeni hakkında bir göz atmanız için bazı referans materyalleri.

https://en.wikipedia.org/wiki/Java_(programming_language)

http://www.freejavaguide.com/history.html

İkisi de C++ ile ilgili olarak hemen hemen aynı şeyi söylediğinden, wiki'den gönderecekler. "Dil, sözdiziminin çoğunu C ve C++ 'dan alıyor, ancak her ikisinden de daha az düşük seviyeli olanaklara sahip."

 

Aynı çağdan itibaren " Bir dilin sözdizimi onun yüzey biçimini tanımlar.". (kıvrımlı parantezler vb.). Bu başlıkta tartışılan şey sözdizimi ile ilgili değildir. Benim düşüncem, MQL ile aynı şekilde 'Java C++'a dayanmaktadır' demek, katılmadığım çok daha güçlü bir ifadedir.

Ancak nitel bir ifade olduğu için aynı anda hem doğru hem de yanlış olabiliriz. Yine de, sorunla önceden verilmiş belirli bir bağlantı olduğunda ve bu sözdizimi ile ilgili bir soru olmadığında, Java özelliklerinin OP'ye nasıl yardımcı olduğunu anlamıyorum.

Bahsettiğiniz her iki makale de Java'nın sözdiziminden ödünç aldığına vurgu yapıyor - ancak bunun dışında pek bir şey yok. Bu, sözdizimi ile ilgili bir sorun değildir.

Ancak bununla ilgili   IEEE 754 Diller tarafından da paylaşılan MQL tarafından kullanılan kayan nokta gösterimi. (ve c benzeri sözdizimine sahip olmayan diğerleri - örneğin Pascal, hatta Excel gibi uygulamalar ) ve bunun nedeni, dillerin sözdizimsel benzerliklerinden ziyade çoğu CPU/FPU tarafından desteklenen bir standart olmasıdır. Sorun, ondalık kesirlerin kayan nokta gösteriminin küçük hatalara sahip olmasıdır. OP iki ondalık basamağa yuvarlamak istiyor. IEEE 754 formatı, onda birini (0,1) veya yüzde birini (0.01) doğru şekilde depolayamaz. IEEE 754 ikili biçiminde bunlar yinelenen ikili kesirlerdir (1/3'ün yinelenen bir ondalık kesir olmasıyla aynı şekilde 0.33333... ) - Amaçlanan sayı ile gerçek sayı arasındaki fark oldukça küçüktür (örneğin 0.0000000000001 ) ancak büyük yeter ki

1/10 != 0.1 // muhtemelen

Ve int(0.1 * 10) yanlış yöne dönebilir

Ancak OP tam olarak gördüklerini yayınlamadığından, en iyi tavsiye bu konunun 3. gönderisinde geri verildi, gidin ve MQL konularını okuyun. MQL konuları verildikten sonra Java özelliklerini de okuduklarını ve muhtemelen Java'ya aşina olmadıklarını önermek için bir nokta görmüyorum.

Konu özeti:

  • OP: Rakamlar komik davranıyor
  • WHRoeader: Kayan noktaların neden tuhaf olduğuna dair birkaç açıklama içeren birkaç bağlantı. < Cevap buralarda bir yerde .. .
  • OP: Onları anlıyorum, sayılar hala komik davranıyor.
  • JD4: MQL4 ve Java, C++'a dayalıdır, burada, Java geliştiricilerinin bile zor bir okuma bulacağı, yazım ve tanıtımla ilgili bazı belirsiz Java bağlantıları bulunmaktadır.
  • ydrol: Bu OP'ye tam olarak nasıl yardımcı olur? Java'nın C++'a dayandığını kabul etmiyorum Cevaplar bir süre önce yayınlandı ...
  • vesaire vesaire.

 
Java tür dönüştürme yöntemini 2 nedenden dolayı yayınladım. Birincisi, kuşkusuz, çünkü Java'ya daha aşinayım. Ve 2, kodu araştırdım ve belki de yaparken yorulduğum için MQL belgelerinde nasıl yapıldığını görmedim. Bu yüzden, yardımcı olmaya çalışmak için, ortak bir dil olan C++ ile ortak karşılaştırmaları göz önüne alındığında, MQL ve Java'nın birbirine yeterince yakın olduğu varsayımlarına dayanarak, işe yarayacağından makul ölçüde emin olduğum olası bir çözüm önerdim.
 
JD4 : Sanırım WH'nin geri dönüp tekrar okuması gerekiyor, işlevin gerçekte ne yaptığını değil, sayfanın söylediğini söylüyordum.
  1. Belki geri dönüp sorunun ne olduğunu tekrar okumalısın.
    NoLimitations : MathRound() kullanıyorsam neden birden fazla ondalık basamağa yanıt alıyorum?
    Sayfa ne diyorsa onu yapar. Yuvarlanır. Birden çok ondalık basamak sorusuyla ilgisi yok.
  2. Birden çok ondalık basamak, gereken sayıyı belirtmeden bir çift yazdırdığınızda olan şeydir.
 
WHRoeder :
JD4 : Sanırım WH'nin geri dönüp tekrar okuması gerekiyor, işlevin gerçekte ne yaptığını değil, sayfanın söylediğini söylüyordum.
  1. Belki geri dönüp sorunun ne olduğunu tekrar okumalısın.
    NoLimitations : MathRound() kullanıyorsam neden birden fazla ondalık basamağa yanıt alıyorum?
    Sayfa ne diyorsa onu yapar. Yuvarlanır. Birden çok ondalık basamak sorusuyla ilgisi yok.
  2. Birden çok ondalık basamak, gereken sayıyı belirtmeden bir çift yazdırdığınızda olan şeydir.

Yukarıdakiler, " MathRound bir çift; sonsuz sayıda ondalık basamak döndürür" yazınıza özel bir yanıttı.

Bir kez daha, dokümantasyon sayfasına göre.

" Dönüş Değeri

Değer en yakın tam sayıya yuvarlanır. "

Şimdi, gönderinizin bu bölümüne özel bir yanıt.

" Sayfanın söylediği, yaptığı şeydir. Yuvarlanır. Birden çok ondalık basamak sorusuyla ilgisi yok. "

Tekrar, alıntıyı tekrar okuyun, "En yakın tam sayıya yuvarlanmış değer" döndürdüğünü söylüyor. Bir tamsayı, tanımı gereği, ondalık basamak olmadığı için bir tam sayıdır. Ve yine, gerçekte yaptığı şey bu değilse, o zaman kod veya açıklama bozulur ve birinin veya diğerinin veya her ikisinin de MQ tarafından düzeltilmesi veya bu işlevlerin gerektiği gibi çalışmadığını belirten bir uyarı etiketi gerekir. reklamı yapıldı.

Aslında kendisine verilen türü döndürürse, ancak en yakın tamsayı değerine matematiksel eşdeğerde (1.23456'dan 1.00000 ve 1 == 1.000000 döndürürde olduğu gibi) ancak gerçek bir tamsayı türü döndürmezse, referans sayfasının "Temel veri türünü değiştirmez" gibi bir şey veya açıkça belirtilen başka bir yol belirtin. Bence bu, orijinal Rusça sayfadan düz bir çeviriydi ve bu nedenle İngilizce olması gerektiği kadar net değil.

Neden: