我有代表纬度和经度的双打.
我可以使用以下功能轻松地将经度限制在(-180.0,180.0).
double limitLon(double lon)
{
return fmod(lon - 180.0, 360.0) + 180.0;
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为一端是独占的,另一端是包容性的.fmod包括0但不包括-360.0.
任何人都可以想到一个优雅的纬度方法吗?
所需间隔为[-90.0,90.0].封闭形式的解决方案是最好的,即没有循环.我认为fmod()可能不是首发,因为现在两端都是包容性的.
编辑:正如所指出的那样,无论如何都不能进入91度纬度.技术上91应该映射到89.0.哦,男孩,这会改变一切.
请考虑以下代码示例:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Tester {
public static void main( String[] args ) throws Exception {
ScriptEngine se = new ScriptEngineManager().getEngineByName( "nashorn" );
Object eval = se.eval( "5%5" );
System.out.println( "eval = " + eval );
System.out.println( "eval.getClass() = " + eval.getClass() );
}
}
Run Code Online (Sandbox Code Playgroud)
为什么它产生以下输出?
eval = 0.0
eval.getClass()= class java.lang.Double
结果类型java.lang.Double很奇怪.
如果余数不同于0则正确返回java.lang.Integer,例如5%2返回java.lang.Integer' with value1`.
只有0才是特别的.
在Firefox 32.0.2(FindBugs控制台)中尝试相同的JavaScript表达式可以正常工作并返回plain 0.
有没有办法强迫Nashorn返回Integer类型而不是Double?
我有一个employee表包含:
emp id Sum
------ ---
1 7
2 6
Run Code Online (Sandbox Code Playgroud)
我想要一个SQL查询来获得除以Sum8 时的商和余数.
我在测试splice迭代数组时是如何工作的,并且不明白为什么0留在列表中?
var array = [2, 5, 9, 14, 0, 1, 3, 6, 7];
for (var i = 0; i < array.length; i++) {
if (array[i]%2 == 0) {
array.splice(i,1);
}
}
//0 % 2 == 0 is true, and yet
//array = [5, 9, 0, 1, 3, 7]
Run Code Online (Sandbox Code Playgroud) 目前我写了一些丑陋的代码
def div(dividend: Int, divisor: Int) = {
val q = dividend / divisor
val mod = dividend % divisor
(q, mod)
}
Run Code Online (Sandbox Code Playgroud)
是否在标准库中指定?
在今天编写着色器程序时,遇到了我必须%用来查找余数的情况.GLSL给了我一个错误,说它在当前版本中不可用.
我试过几个问题.GLSL不支持递归函数和while循环,如果我想创建一个可以给我结果的函数,则需要它(a % b).
所以,我现在卡住了.有人可以帮我弄这个吗?
编辑.我试图使用本网站的一些着色器代码作为参考代码来模拟CRT屏幕.我想修改某些行和列的像素颜色,所以我需要使用模运算符.
起初,我认为模数函数是使用%运算符完成的.它不起作用,所以我尝试使用递归函数/ while循环作为模数函数的变通方法,它也不起作用.
是否有诀窍在Javascript中获取大数字的模数.我得到了modulo(7, 16971, 25777) 无穷无尽的7 ^ 16971mod25777 = NaN
function modulo (n, p, m){
var x = Math.pow(n, p);
var y = m;
var z = x%y;
alert(x);
return z;
}
Run Code Online (Sandbox Code Playgroud) 我在Java 7中运行它,我得到:
double remainder1 = 1 % 1000;
double remainder2 = 0.01 % 1000;
double remainder3 = -1 % 1000;
System.out.println("START: "+remainder1+" | "+remainder2+" | "+remainder3);
>>>START: 1.0 | 0.01 | -1.0
Run Code Online (Sandbox Code Playgroud)
但是当我在Perl 5.8.8中运行相同的操作时,我得到了三分之二的不同结果:
my $remainder1 = 1 % 1000;
my $remainder2 = 0.01 % 1000;
my $remainder3 = -1 % 1000;
print "START: $remainder1 | $remainder2 | $remainder3";
>>>START: 1 | 0 | 999
Run Code Online (Sandbox Code Playgroud)
为什么在最后两次计算中存在这样的差异?如何让perl匹配java结果?
Rosettacode.org在Ruby中提供了这个出色的单行FizzBuzz解决方案.
1.upto(100){|n|puts'FizzBuzz '[i=n**4%-15,i+13]||n}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,我不明白.令我困惑的部分是"4模数-15的力量".有没有人有解释或参考解释?我想用这种方法在其他问题中选择子串.有关FizzBuzz的更多信息,请参阅[ https://rosettacode.org/wiki/FizzBuzz ]