Lon*_*Dao 7 java double android decimal rounding
我陷入了下面的情景:
如果x为1.5或更低,则最终结果为x = 1.如果x大于1.5,则x = 2.
输入数字为x/100.
例如:input = 0.015 => x = 1.5 => display x = 1.
我得到的问题是浮点数不准确.例如:input = 0.015但实际上它类似于0.01500000000000002.在这种情况下,x将是1.500000000000002,其大于1.5 =>显示输出是x = 2.
它是随机发生的,我不知道如何解决它.像0.5一样,1.5会给我正确的结果.但2.5,3.5,4.5,5.5会给我错误的结果.然后6.5将再次给我正确的结果.
我实现的代码如下:
float x = 0.015;
NumberFormat nf = DecimalFormat.getPercentInstance();
nf.setMaximumFractionDigits(0);
output = nf.format(x);
Run Code Online (Sandbox Code Playgroud)
所以取决于x,输出可能是对还是错.这是随机的.
我尝试使用Math.round,Math.floor,Math.ceils,但由于浮点数不可预测,因此它们似乎都不起作用.
对解决方案有何建议?
提前致谢.
将float值 f舍入到小数点后两位。
String s = String.format("%.2f", f);
Run Code Online (Sandbox Code Playgroud)
转换String为float...
float number = Float.valueOf(s)
Run Code Online (Sandbox Code Playgroud)
如果要舍入float到intthen.... 有不同的方法可以将 float 向下转换为 int,具体取决于您想要实现的结果。
round(最接近给定浮点数的整数)
int i = Math.round(f);
Run Code Online (Sandbox Code Playgroud)
例子
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
你可以使用String.format.
String s = String.format("%.2f", 1.2975118);
Run Code Online (Sandbox Code Playgroud)
这是我的旧代码高尔夫答案。
public class Main {
public static void main(String[] args) {
System.out.println(math(1.5f));
System.out.println(math(1.500001f));
System.out.println(math(1.49999f));
}
public static int math(float f) {
int c = (int) ((f) + 0.5f);
float n = f + 0.5f;
return (n - c) % 2 == 0 ? (int) f : c;
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13317 次 |
| 最近记录: |