[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 303

 
Bir soru daha, xrust indikatörünü (https://www.mql5.com/en/code/8318) analiz ediyorum aslında, yüksek ve düşük fiyatları Expert Advisor'a (çıktı grafiği ile birlikte) aktarmam gerekiyor. gerekli ((. Biri iletilmiş gibi görünüyor, ikincisi 0 çıkıyor. Gerçek değerler nasıl gösterilecek? Değişikliğin sonuçlarını ekliyorum, hatanın ne olduğunu anlamıyorum)
 
hoz :

Kütüphanelerle çalışmayı öğreniyorum. Bir uzman yazıyorum, böyle bir işlev var:

Dahilde çıkardım, her şey olması gerektiği gibi çalışıyor. Ve bir kütüphaneye bağlarsanız, Uzman Danışmanı derlerken bir hata oluşur:

Bu işlev neden kitaplıktan görünmüyor?

Kitaplık aşağıdaki içeriğe sahiptir ve iyi derler:

Birçok hata. Bir örneğe bakıp benzetme ile yapabilir misiniz?
 

Bir alıntı var, Diyelim ki Sor = 1.20667

Bu alıntıdan, ondalık noktadan sonraki 3. basamağı çıkarmanız gerekir. Onlar. 1.206 değerini alın, gerisini atın.

Lütfen bana nasıl doğru yapılacağını söyle? çünkü " Normalizasyon " yuvarlar ve 1.20700 alır

Etrafında çalışmaya çalıştım:

DoubleToStr(Ask, 3 )

Evet, her şey doğru -> 1.206 verir. Ancak Double formatına döndüğünüzde tekrar yuvarlanır, ancak 2. ondalık basamağa döner.

StrToDouble(DoubleToStr(Ask, 3 )) = 1 , 2100      // 1,2100 - это получившийся результат (т.е. округляет)

Yuvarlamaya ihtiyacım yok. Ondalık noktadan sonra 2., 3. veya 4. basamağı (görevi seçmek için) almam ve gerisini atmam gerekiyor.

Nasıl doğru yapılır?

 
Chiripaha :

Bir alıntı var, varsayalım Sor = 1.20667

Bu alıntıdan, ondalık noktadan sonraki 3. basamağı çıkarmanız gerekir. Onlar. 1.206 değerini alın, gerisini atın.

Lütfen bana nasıl doğru yapılacağını söyle? çünkü " Normalizasyon " yuvarlar ve 1.20700 alır

Etrafında çalışmaya çalıştım:

Evet, her şey doğru -> 1.206 verir. Ancak Double formatına döndüğünüzde tekrar yuvarlanır, ancak 2. ondalık basamağa döner.

Yuvarlamaya ihtiyacım yok. Ondalık noktadan sonra 2., 3. veya 4. basamağı (görevi seçmek için) almam ve gerisini atmam gerekiyor.

Nasıl doğru yapılır?

Doğru yoldasınız: double'ı Digits ile string'e dönüştürün ve ardından sonuçtan gerekli sayıda basamağı kesin ( StringSubstr() ).
 
Chiripaha :

Bir alıntı var, varsayalım Sor = 1.20667

Bu alıntıdan, ondalık noktadan sonraki 3. basamağı çıkarmanız gerekir. Onlar. 1.206 değerini alın, gerisini atın.

Lütfen bana nasıl doğru yapılacağını söyle? çünkü " Normalizasyon " yuvarlar ve 1.20700 alır

Etrafında çalışmaya çalıştım:

Evet, her şey doğru -> 1.206 verir. Ancak Double formatına döndüğünüzde tekrar yuvarlanır, ancak 2. ondalık basamağa döner.

Yuvarlamaya ihtiyacım yok. Ondalık noktadan sonra 2., 3. veya 4. basamağı (görevi seçmek için) almam ve gerisini atmam gerekiyor.

Nasıl doğru yapılır?

https://docs.mql4.com/en/strings/StringSubstr
 

Özür dilerim - yanlış anlaşılmış olabileceğimi varsaydım. Açıklığa kavuşturmaya çalıştı, ama yine de etkisi kaldı. - Benim hatam, üzgünüm.

Sadece bir rakama (ondalık noktadan sonra 3., 4. vb.) değil, 2., 3. veya 4. ondalık basamağa kadar olan tüm rakama ihtiyacım var. ANCAK! yuvarlama yok.

Ve sorun şu ki, Double öğesine bir rakamı geri döndürdüğümde, tekrar yuvarlanıyor.

Ve bütün şaka şu ki, bu sayı aptalca büyük bir şekilde, her seferinde bir harf olmak üzere, önce String türünde ve sonra Double'a çevrilse bile,

sonra tekrar yuvarlanacak. - Durumun ironisi bu. Neden StrToDouble() bir rakamı yuvarlar? - Bunu anlamıyorum. Fonksiyonun görevi onu yeniden oluşturmaktır.

bir format diğerine dönüştürün ve kendinizden hiçbir şeyi "şekillendirmeyin" ve oraya hiçbir şey eklemeyin. Ama o başka bir şey ve "iyileşiyor".

 
Chiripaha :

Özür dilerim - yanlış anlaşılmış olabileceğimi varsaydım. Açıklığa kavuşturmaya çalıştı, ama yine de etkisi kaldı. - Benim hatam, üzgünüm.

Sadece bir rakama (ondalık noktadan sonra 3., 4. vb.) değil, 2., 3. veya 4. ondalık basamağa kadar olan tüm rakama ihtiyacım var. ANCAK! yuvarlama yok.

Ve sorun şu ki, Double öğesine bir rakamı geri döndürdüğümde, tekrar yuvarlanıyor.

Ve bütün şaka şu ki, bu sayı aptalca büyük bir şekilde, her seferinde bir harf olmak üzere, önce String türünde ve sonra Double'a çevrilse bile,

sonra tekrar yuvarlanacak. - Durumun ironisi bu. Neden StrToDouble() bir rakamı yuvarlar? - Bunu anlamıyorum. Fonksiyonun görevi onu yeniden oluşturmaktır.

bir format diğerine dönüştürün ve kendinizden hiçbir şeyi "şekillendirmeyin" ve oraya hiçbir şey eklemeyin. Ama o başka bir şey ve "iyileşiyor".

Rakam ve sayı arasındaki farkı biliyor musunuz?
 
Chiripaha :

Özür dilerim - yanlış anlaşılmış olabileceğimi varsaydım. Açıklığa kavuşturmaya çalıştı, ama yine de etkisi kaldı. - Benim hatam, üzgünüm.

Sadece bir rakama (ondalık noktadan sonra 3., 4. vb.) değil, 2., 3. veya 4. ondalık basamağa kadar olan tüm rakama ihtiyacım var. ANCAK! yuvarlama yok.

Ve sorun şu ki, Double öğesine bir rakamı geri döndürdüğümde, tekrar yuvarlanıyor.

Ve bütün şaka şu ki, bu sayı aptalca büyük bir şekilde, her seferinde bir harf olmak üzere, önce String türünde ve sonra Double'a çevrilse bile,

sonra tekrar yuvarlanacak. - Durumun ironisi bu. Neden StrToDouble() bir rakamı yuvarlar? - Bunu anlamıyorum. Fonksiyonun görevi onu yeniden oluşturmaktır.

bir format diğerine dönüştürün ve kendinizden hiçbir şeyi "şekillendirmeyin" ve oraya hiçbir şey eklemeyin. Ama o başka bir şey ve "iyileşiyor".

"Duyma" yeteneğini geliştirmelisin! :))
 

: )))))))) Evet doğru. Tüm suçlamaları kabul ediyorum! - Bunun için tekrar özür dilerim. - Tüm bunlar oldukça gelişmiş (özel egzersizler) maliyetleridir.

yaratıcı, figüratif, şiirsel vb. taraflar - sonuçta, bir kişinin iki yarım küresi vardır: yaratıcı ve rasyonel. Benim hatam, bunu gördüm ve düzeltmedim.

Dolayısıyla tüm iddialarınız adreste ve ben suçluyum.

ama sorun çözülmedi...

Sonunda nasıl çözülür?

Bir şeyi kaçırdığımı düşünüyorsanız, lütfen açıklayın. Geri bildirim tekniğini ("duyabilme" yeteneği için) anlıyorum, ancak henüz bir çözüm görmedim.

İstenen sayı, Double biçiminde, örneğin Ask = 1.20667 değerinde 3. ondalık basamağa yuvarlamadan nasıl elde edilir? - "StrToDouble(DoubleToStr(Ask,3)) = 1.2100 // 1.2100, elde edilen sonuçtur (yani yuvarlar)" gibi bir çözüm işe yaramadı.

Hoşgörü ve anlayışınız için şimdiden teşekkür ederiz.

 
Zhunko :
Rakam ve sayı arasındaki farkı biliyor musunuz?


:)) Evet, elbette, farkı anlıyorum. Ancak özür dileyen ve açıklayıcı bir gönderide hala bu lekeyi yaptım (İstenen rakamı yuvarlamadan nasıl elde edebilirim ...), düzeltmek zorunda kaldım (ve hemen fark etmedim). Bu bir yanlış anlama değil, bu, imgelemenin gelişiminin ikinci yüzü. Malesef masraflar bunlar "Yaşayan ölü" ya da bunun gibi bir şey dedikleri zaman, bunun da saçma olduğu ortaya çıkıyor. Ancak bu olmadan, şeylerin özünün mecazi bir algısı imkansızdır. Yani normal. Kesinlikle yargılamayın. :) Sonuçta, gerçek algı da bağırsak değil. - Deneyeceğim, dahil. ve yardımınızla iletişiminizi düzeltin. Birlikte hayatı daha iyi ve daha mükemmel hale getireceğiz. Yorumlarınız için teşekkürler!