草庐IT

floating_bond

全部标签

java - 如何避免 Java 中的 float 或 double 的浮点精度错误?

我有一个非常烦人的问题,即Java中的float或double很长。基本上这个想法是,如果我执行:for(floatvalue=0.0f;value我得到的是:0.00.10.20.30.40.50.60.700000050.80000010.9000001我知道有float精度误差的累积,但是,如何摆脱这个?我尝试使用doubles将错误减半,但结果还是一样。有什么想法吗? 最佳答案 没有将0.1精确表示为float或double。由于这种表示错误,结果与您的预期略有不同。您可以使用的几种方法:当使用double类型时,只显示你需

java - 如何避免 Java 中的 float 或 double 的浮点精度错误?

我有一个非常烦人的问题,即Java中的float或double很长。基本上这个想法是,如果我执行:for(floatvalue=0.0f;value我得到的是:0.00.10.20.30.40.50.60.700000050.80000010.9000001我知道有float精度误差的累积,但是,如何摆脱这个?我尝试使用doubles将错误减半,但结果还是一样。有什么想法吗? 最佳答案 没有将0.1精确表示为float或double。由于这种表示错误,结果与您的预期略有不同。您可以使用的几种方法:当使用double类型时,只显示你需

java - java - 当没有接受long的方法时,为什么java将long参数提升为float/double?

这是SSCCE这演示了所描述的(恕我直言,奇怪的)行为:publicclassTest{publicstaticvoidprint(intparam){System.out.println("int");}publicstaticvoidprint(floatparam){System.out.println("float");}publicstaticvoidprint(Longparam){//为什么java会这样做? 最佳答案 JavaLanguageSpecification很清楚(强调我的):15.12.2Compile-

java - java - 当没有接受long的方法时,为什么java将long参数提升为float/double?

这是SSCCE这演示了所描述的(恕我直言,奇怪的)行为:publicclassTest{publicstaticvoidprint(intparam){System.out.println("int");}publicstaticvoidprint(floatparam){System.out.println("float");}publicstaticvoidprint(Longparam){//为什么java会这样做? 最佳答案 JavaLanguageSpecification很清楚(强调我的):15.12.2Compile-

java - 在 SLF4J 中格式化 float

我想用SLF4J格式化我的double和float。基本上,我在SLF4J中寻找Java的String.format("%.2f",floatValue)的等价物。阅读了SLF4J的文档并四处搜索后,我找不到它是否具有该功能的提示。我正在使用slf4j-api:1.7.6和slf4j-jdk14:1.7.6非常感谢任何帮助。 最佳答案 我假设您指的是SLF4J的扩展参数约定,例如:floatf;...logger.debug("Mynumberis{}",f);所以,答案是否定的。从SLF4J1.7.7开始,您要求做的事情是不可能的

java - 在 SLF4J 中格式化 float

我想用SLF4J格式化我的double和float。基本上,我在SLF4J中寻找Java的String.format("%.2f",floatValue)的等价物。阅读了SLF4J的文档并四处搜索后,我找不到它是否具有该功能的提示。我正在使用slf4j-api:1.7.6和slf4j-jdk14:1.7.6非常感谢任何帮助。 最佳答案 我假设您指的是SLF4J的扩展参数约定,例如:floatf;...logger.debug("Mynumberis{}",f);所以,答案是否定的。从SLF4J1.7.7开始,您要求做的事情是不可能的

java - 如何从 float[] 中获取 Stream

当我发现一些奇怪的东西时,我正在学习如何使用java8流。Arrays.stream()拥有除float组之外的所有方法:Arrays.stream(int[]):IntStreamArrays.stream(long[]):LongStreamArrays.stream(double[]):DoubleStream同样,有int、double等的Stream实现,但没有float:IntStreamLongStreamDoubleStream这是有原因的吗?使用float流的推荐方法是什么? 最佳答案 这是一种更好的方法,它不涉及

java - 如何从 float[] 中获取 Stream

当我发现一些奇怪的东西时,我正在学习如何使用java8流。Arrays.stream()拥有除float组之外的所有方法:Arrays.stream(int[]):IntStreamArrays.stream(long[]):LongStreamArrays.stream(double[]):DoubleStream同样,有int、double等的Stream实现,但没有float:IntStreamLongStreamDoubleStream这是有原因的吗?使用float流的推荐方法是什么? 最佳答案 这是一种更好的方法,它不涉及

java - 为什么 Java 隐式(没有强制转换)将 `long` 转换为 `float` ?

每当我认为自己理解了强制转换和转换时,我都会发现另一种奇怪的行为。longl=123456789L;floatf=l;System.out.println(f);//outputs1.23456792E8鉴于long比float具有更大的位深度,我预计需要显式转换才能编译。毫不奇怪,我们发现我们的结果失去了精度。为什么这里不需要类型转换? 最佳答案 long到double可以问同样的问题-两种转换都可能丢失信息。Section5.1.2oftheJavaLanguageSpecification说:Wideningprimitive

java - 为什么 Java 隐式(没有强制转换)将 `long` 转换为 `float` ?

每当我认为自己理解了强制转换和转换时,我都会发现另一种奇怪的行为。longl=123456789L;floatf=l;System.out.println(f);//outputs1.23456792E8鉴于long比float具有更大的位深度,我预计需要显式转换才能编译。毫不奇怪,我们发现我们的结果失去了精度。为什么这里不需要类型转换? 最佳答案 long到double可以问同样的问题-两种转换都可能丢失信息。Section5.1.2oftheJavaLanguageSpecification说:Wideningprimitive