返回负值的位置大小 - 页 2

 
NoLimitations:

我也刚试过用这个方法,但无济于事。可能DTS只是改变了外观值的准确性而不是实际值?我没有看到任何其他选项。

是的,我认为字符串只是使双数中的值成为可打印的版本,但并不改变它。 不知道在MQL中如何做,但我知道在Java中你可以强制从一种类型转换到另一种类型(在这种情况下,双数到int)。

从oracle的文档中,http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html。 这只是提出了一小部分的代码。

// 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);

在你的案例中,我相信你会让它说成是这样的

int intConvertedDouble = (int) valueYouGotItFrom;

很明显,你需要调整这些名称以更好地适应你的代码。

http://www.studytonight.com/java/type-casting-in-java,那里也涵盖了这一点。由于Java和MQL都应该是基于C++的,这可能对你有所帮助。

 

@OP,以及阅读 之前发布的 所有 MQL4链接,请看Working With DoublesPrintFormat

@JD4 我不明白张贴Java代码和引用Java规范对OP有什么帮助。另外,Java和C++是相似的,但我不同意说它是基于C++的。

虽然你想帮助别人,但我认为你的许多回复在你自己都不确定答案的时候,只会让寻求帮助的人感到困惑。

 
ydrol:

@OP,以及阅读 之前发布的 所有 MQL4链接,请看Working With DoublesPrintFormat

@JD4 我不明白张贴Java代码和引用Java规范对OP有什么帮助。另外,Java和C++是相似的,但我不同意说它是基于C++的。

虽然你想帮助别人,但我认为你的许多回复在你自己都不确定答案的时候,只会让寻求帮助的人感到困惑。

关于你的C++思想,请看https://www.mql5.com/en/docs/basis。 那里说得很清楚,由于他们修改了MQL4,使其更像MQL5(https://docs.mql4.com/mql4changes),所以这里也适用。至于我的知识基础,我从未声称自己是专家,而且我让人们知道,当我发帖时,如果我不确定什么,至少我尝试了,有时可能会错过它。如果我开的是雪佛兰,而且我遇到了问题,我不会坐在那里,对那些只在福特汽车上工作的人的建议打折扣,如果那是有用的建议,即使它可能不是很正确。 我也不会坐在那里,告诉他们不要认为你可以帮助,如果他们这样做是为了尝试帮助。
 

我想你误读了我的帖子。Mql4 OO肯定是基于c++的,我不认为有任何争议。我指的是你的论断。

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

后面有很多Java的引用。我说 -

ydrol:另外Java 和C++是相似的,但我不同意它是基于C++的说法

我是特意说的你的Java引用。在我看来,Java不是基于c++的。

在任何情况下,在WHRoeder 之前提到的线程 中,关于用浮点表示小数的问题已经被覆盖了好几次。

看起来OP想四舍五入到小数点后两位,但没有发布任何输出或具体的例子,我猜他们看到的四舍五入误差程度可以忽略不计。

 
JD4: 根据它的文档页,不是这样的。https://docs.mql4.com/math/mathround
NoLimitations。JD4是对的,文档页说它四舍五入到最近的整数。

两者都错了。它四舍五入到最近的整数。无关紧要。它返回一个双数。 1 = 1.0 = 1.00 = 1.00000 = 1.000000000000000000000000000000无限位数

了解一下浮点。==操作数。- MQL4论坛



 

我想WH需要回去重新阅读,我说的是页面上所说的函数的作用,而不是它的实际作用。 计算机编程是少数几个在数据类型方面(int)1!=(double)1.00000000(无限)的地方之一。


@ ydrol,我错过了你关于MQL/Java/C++的声明的意图方向。 关于Java作为一种编程语言的起源,你可以看看一些参考材料。

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

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

由于它们对C++的说法几乎完全相同,所以我将从wiki上发表。"该语言的大部分语法 来自CC++,但它的低级 设施比它们都少。"

 

来自同一时代的"一种语言的语法定义了它的表面 形式。"。( 大括号等)。在这个主题中所讨论的内容与语法无关。我的看法是,说 "Java是基于C++的",就像MQL是基于C++的一样,是一种更强烈的说法,我不同意

但由于这是一个定性的说法,我们可以同时说对也可以说错。 我还是不明白Java规范对OP有什么帮助,因为这个问题已经有了具体的联系,而且这也不是语法相关的问题。

你提到的两篇文章,都强调Java借鉴了语法--但没有什么其他的。这不是一个与语法有关的问题。

但它与MQL使用的IEEE 754浮点表示法有关,这也是这些语言所共有的。(以及许多其他没有像c语言那样的语法的语言--如Pascal,甚至像Excel这样的应用程序),这实际上是因为它是大多数CPU/FPU支持的标准,而不是语言的语法相似性。 问题是小数点的浮点表示法有小的误差。OP想四舍五入到两位小数。IEEE 754格式不能准确地存储十分之一(0.1)或百分之一(0.01)。在IEEE 754二进制格式这些都是重复出现的二进制分数,(就像1/3是重复出现的十进制分数0.33333一样......)--预期数字和实际数字之间的差异相当小(例如0.00000000000001),但它足够大,因此

1/10 != 0.1 //可能是

而int(0.1 * 10)可能会被四舍五入。

但是,由于OP没有准确地发布他们所看到的情况,最好的建议是在这个主题的第3个帖子中给出的,去阅读MQL主题。我不认为在MQL线程给出后还建议他们阅读Java规范有什么意义,他们可能对Java不熟悉。

线程摘要。

  • OP:数字的行为很奇怪
  • WHRoeader。这里有几个链接,有几个解释,为什么浮点会很奇怪。 <答案就在这里的某个地方 ...
  • OP:我明白了,数字还是表现得很奇怪。
  • JD4:MQL4和Java都是基于C++的,这里有一些关于类型化和推广的晦涩的Java链接,即使是Java开发者也会觉得很难读懂。
  • ydrol: 这对OP到底有什么帮助?我不同意Java是基于C++的说法,答案在前段时间已经发布了...
  • 等等,等等。

 
我贴出Java的类型转换方式有两个原因。 首先是,我承认,因为我对Java比较熟悉。 其次,我搜索了一下代码,也许是因为我做的时候很累,我没有在MQL文档中看到如何做。 所以,为了试图提供帮助,我提出了一个可能的解决方案,我有理由相信会成功,基于假设MQL和Java足够接近,因为它们共同比较了一种共同的语言,C++。
 
JD4: 我想WH需要回去重新阅读,我说的是页面上所说的函数的作用,而不是它的实际作用。
  1. 也许你应该回去重读一下问题的内容。
    NoLimitations。如果我使用MathRound(),为什么还会得到多个小数位的答案?
    页面上所说的,就是它所做的。它是取整的。与小数点后多位的问题没有关系。
  2. 多位小数是当你打印一个双数而没有指定所需的数字时发生的情况。
 
WHRoeder:
JD4: 我想WH需要回去重新阅读,我说的是页面上说的函数的作用,而不是它的实际作用。
  1. 也许你应该回去重读一下问题是什么。
    NoLimitations。如果我使用MathRound(),为什么还会得到多小数位的答案?
    页面上所说的,就是它所做的。它是取整的。与小数点后多位的问题没有关系。
  2. 多位小数是当你打印一个双数而没有指定所需的数字时发生的情况。

以上是对你的具体帖子"MathRound返回一个双数;无限的小数位。"

再一次,根据文档页的内容。

"返回值

四舍五入到最接近的整数的值。"

现在,具体回应你帖子的这一部分。

"页面上所说的,就是它所做的。它是四舍五入的。与多个小数位的问题无关。"

再说一遍,重读这段话,它说它返回"四舍五入到最接近的整数"。 根据定义,整数是一个整数,就像没有小数位一样。 再说一遍,如果这不是它实际做的,那么代码或描述就有问题,一个或另一个或两者都需要被MQ修复,否则就需要一个警告标签,说明这些函数 没有像宣传的那样执行。

如果它实际上返回了给定的类型,但在数学上相当于最接近的整数的值(如从1.23456返回1.00000,而1==1.00000),但不返回实际的整数类型,那么参考页需要指定一些东西,如 "不改变基础数据类型 "或其他一些明确说明的方式。 我认为这是一个从俄罗斯原始页面平移的翻译,因此,在英语中不像它应该那样清楚。