gpt4 book ai didi

保留粒度的 Java 函数

转载 作者:搜寻专家 更新时间:2023-11-01 02:30:31 24 4
gpt4 key购买 nike

我需要在模糊作业中保持粒度,所以我创建了一个接收参数的函数:

  • 粒度(0 和 1 之间的 double 值,不包括 0)
  • 要转换的值,如有必要(它是大于 0 的两倍)

并返回一个具有正确粒度的新值。

这是我的功能:

public static double preserveGranularity(double granul, double value){
double integerValue= (double)(int)value;
if(granul == 1)
return integerValue;
double decimal = value - integerValue;
long factor = Math.round(decimal/granul);
return integerValue + granul*factor;
}

例子:

  • preserveGranularity(0.25, 7.7) 应该返回 7.75
  • preserveGranularity(0.01, 0.009) 应该返回 0.01

它适用于大多数值,但并非适用于所有值(例如:preserveGranularity(0.2, 0.57)=0.6000000000000001,它应该返回 0.6)

问候

附言对于我在这个问题上犯的任何错误,我很抱歉,这是我的第一个问题

最佳答案

您无法使用 double 实现此目的 - 因为它不够准确。
double不是实数。只有有限数量的位来表示它们 - 而那里有无限数量的实数(甚至有理数),因此这些舍入误差是意料之中的。

我想你在找BigDecimal ,它允许您根据需要控制粒度,例如使用其 round()方法。

关于保留粒度的 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com