Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CWE-681:避免Java中不兼容变异期间的数字数据损坏_Java_Precision - Fatal编程技术网

CWE-681:避免Java中不兼容变异期间的数字数据损坏

CWE-681:避免Java中不兼容变异期间的数字数据损坏,java,precision,Java,Precision,根据CISQ标准和CAST扫描工具,我得到了一个名为“在不兼容变异期间避免数字数据损坏”的错误。下面是原始代码。你知道如何避免这种情况吗 public int getAge() { return (int) ChronoUnit.YEARS.between(getFoedselsdato(), LocalDate.now()); } 我尝试过使用JAVA 8对JAVA.Math.toIntExact进行加密,但我不确定这有什么不同。 return toIntExact(Chron

根据CISQ标准和CAST扫描工具,我得到了一个名为“在不兼容变异期间避免数字数据损坏”的错误。下面是原始代码。你知道如何避免这种情况吗

 public int getAge() {
      return (int) ChronoUnit.YEARS.between(getFoedselsdato(), LocalDate.now());
}
我尝试过使用JAVA 8对JAVA.Math.toIntExact进行加密,但我不确定这有什么不同。

return toIntExact(ChronoUnit.YEARS.between(LocalDate.of(2014,1, 1), LocalDate.now()));

正如@AndyTurner在评论中所表示的,问题在于从
long
int
的转换,这可能导致错误的计算

可能的解决方法是将返回类型更改为
long
,这可能会导致将强制转换移动到其他位置,或者使用
toIntExact


与普通的旧模式不同的是,如果
long
实际上不适合
int
toIntExact
实际上会引发
算术异常

,除非你比较过去或未来20亿年的日期,否则这不是一个实际问题。如果必须,请使用
来执行
,否则只需抑制它即可。