计算数字线上的正负值

时间:2016-03-21 15:27:01

标签: java

我真的不知道如何制定我的问题,但我会尝试。 我想要做的是基本上用double值替换userinput中的符号。重复过程现在不相关,我在计算替换时出现问题。想象一下带有负数和正数的数字线,例如。从-5到5( source.addEventListener('message', function(e) { if (e.origin != 'http://example.com') { alert('Origin was not http://example.com'); return; } ... }, false); 将是10然后)。 想象一下maxX作为我需要的替换之间的步长。因此,我需要计算的替换项为:scale(因为:-5.0, -4.8, -4.6, -4.4, [...], 4.4, 4.6, 4.8, 5.0)。 继承我的代码(仅用于计算):

n/scale = 0/5, 1/5, 2/5 [...]

它工作正常,int maxX = 10; int scale = 5; public void rep(){ double rep = 0; int n = 0; for (int k = (-maxX/2)*scale; k <= (maxX/2)*scale; k++){ if (k < 0){ rep = (double) n/scale +((int) ((k)/scale)); System.out.println("k: "+k+" "+rep); } if (k >= 0){ rep = (double) n/scale +((int) ((k)/scale)); System.out.println("k: "+k+" "+rep); } if (n < scale-1){ n++; } else { n = 0; } } } 的结果符合要求,但是k => 0的结果不能满足我的需求,因为它们是错误的(控制台外观):

k < 0

更改内容以便k: -25 -5.0 // correct k: -24 -3.8 // wrong k: -23 -3.6 // wrong k: -22 -3.4 // wrong k: -21 -3.2 // wrong k: -20 -4.0 // correct k: -19 -2.8 k: -18 -2.6 k: -17 -2.4 k: -16 -2.2 k: -15 -3.0 k: -14 -1.8 k: -13 -1.6 k: -12 -1.4 k: -11 -1.2 k: -10 -2.0 k: -9 -0.8 k: -8 -0.6 k: -7 -0.4 k: -6 -0.19999999999999996 k: -5 -1.0 k: -4 0.2 k: -3 0.4 k: -2 0.6 k: -1 0.8 k: 0 0.0 k: 1 0.2 k: 2 0.4 k: 3 0.6 k: 4 0.8 k: 5 1.0 k: 6 1.2 k: 7 1.4 k: 8 1.6 k: 9 1.8 k: 10 2.0 k: 11 2.2 k: 12 2.4 k: 13 2.6 k: 14 2.8 k: 15 3.0 k: 16 3.2 k: 17 3.4 k: 18 3.6 k: 19 3.8 k: 20 4.0 k: 21 4.2 k: 22 4.4 k: 23 4.6 k: 24 4.8 k: 25 5.0 的输出与k < 0匹配,我无法绕过它。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您想使用代码,请尝试使用(int)Math.floor((double)k/scale)代替(k)/scale

Altneratively你可以在循环中加上1 / scale但由于精度问题你需要使用BigDecimal:

int maxX = 10;
int scale = 5;
BigDecimal start = BigDecimal.valueOf( -maxX/2 );
BigDecimal end = BigDecimal.valueOf( maxX/2 );
BigDecimal step = BigDecimal.valueOf( 1.0/scale );
for( BigDecimal v = start; v.compareTo( end) <= 0; v = v.add( step ) ) 
{ 
  System.out.println("k:" + v.multiply( BigDecimal.valueOf( scale ) ).intValue() + "  " + v ); 
}