// 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);
我也刚试过用这个方法,但无济于事。可能DTS只是改变了外观值的准确性而不是实际值?我没有看到任何其他选项。
是的,我认为字符串只是使双数中的值成为可打印的版本,但并不改变它。 不知道在MQL中如何做,但我知道在Java中你可以强制从一种类型转换到另一种类型(在这种情况下,双数到int)。
从oracle的文档中,http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html。 这只是提出了一小部分的代码。
在你的案例中,我相信你会让它说成是这样的
很明显,你需要调整这些名称以更好地适应你的代码。
http://www.studytonight.com/java/type-casting-in-java,那里也涵盖了这一点。由于Java和MQL都应该是基于C++的,这可能对你有所帮助。
@OP,以及阅读 之前发布的 所有 MQL4链接,请看Working With Doubles 和PrintFormat。
@JD4 我不明白张贴Java代码和引用Java规范对OP有什么帮助。另外,Java和C++是相似的,但我不同意说它是基于C++的。
虽然你想帮助别人,但我认为你的许多回复在你自己都不确定答案的时候,只会让寻求帮助的人感到困惑。
@OP,以及阅读 之前发布的 所有 MQL4链接,请看Working With Doubles 和PrintFormat。
@JD4 我不明白张贴Java代码和引用Java规范对OP有什么帮助。另外,Java和C++是相似的,但我不同意说它是基于C++的。
虽然你想帮助别人,但我认为你的许多回复在你自己都不确定答案的时候,只会让寻求帮助的人感到困惑。
我想你误读了我的帖子。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想四舍五入到小数点后两位,但没有发布任何输出或具体的例子,我猜他们看到的四舍五入误差程度可以忽略不计。
两者都错了。它四舍五入到最近的整数。无关紧要。它返回一个双数。 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上发表。"该语言的大部分语法 来自C 和C++,但它的低级 设施比它们都少。"
来自同一时代的"一种语言的语法定义了它的表面 形式。"。( 大括号等)。在这个主题中所讨论的内容与语法无关。我的看法是,说 "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不熟悉。
线程摘要。
以上是对你的具体帖子"MathRound返回一个双数;无限的小数位。"
再一次,根据文档页的内容。
"返回值
四舍五入到最接近的整数的值。"
现在,具体回应你帖子的这一部分。
"页面上所说的,就是它所做的。它是四舍五入的。与多个小数位的问题无关。"
再说一遍,重读这段话,它说它返回"四舍五入到最接近的整数"。 根据定义,整数是一个整数,就像没有小数位一样。 再说一遍,如果这不是它实际做的,那么代码或描述就有问题,一个或另一个或两者都需要被MQ修复,否则就需要一个警告标签,说明这些函数 没有像宣传的那样执行。
如果它实际上返回了给定的类型,但在数学上相当于最接近的整数的值(如从1.23456返回1.00000,而1==1.00000),但不返回实际的整数类型,那么参考页需要指定一些东西,如 "不改变基础数据类型 "或其他一些明确说明的方式。 我认为这是一个从俄罗斯原始页面平移的翻译,因此,在英语中不像它应该那样清楚。