Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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
Java 如何在Android中对浮点数进行舍入_Java_Android_Double_Decimal_Rounding - Fatal编程技术网

Java 如何在Android中对浮点数进行舍入

Java 如何在Android中对浮点数进行舍入,java,android,double,decimal,rounding,Java,Android,Double,Decimal,Rounding,我被困在下面的场景中: 如果x为1.5或更低,则最终结果为x=1。 如果x大于1.5,则x=2 输入数字将为x/100 例如: 输入=0.015=>x=1.5=>display x=1 我遇到的问题是浮点数不准确。例如: 输入=0.015,但实际上它类似于0.01500000000000002。在这种情况下,x为1.500000000000002,大于1.5=>显示输出为x=2 它发生得如此随机,我不知道如何解决它。就像0.5,1.5会给我正确的结果。但是2.5,3.5,4.5,5.5会给我错误

我被困在下面的场景中:

如果x为1.5或更低,则最终结果为x=1。 如果x大于1.5,则x=2

输入数字将为x/100

例如: 输入=0.015=>x=1.5=>display x=1

我遇到的问题是浮点数不准确。例如: 输入=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);
所以取决于x,输出可能是对的,也可能是错的。这是如此随机

我曾经尝试过使用Math.round、Math.floor、Math.ceils,但它们似乎都不起作用,因为浮点数是如此不可预测

有什么解决办法的建议吗


提前感谢。

您可以使用
String.format

String s = String.format("%.2f", 1.2975118);

我也面临着同样的问题,我使用了
DecimalFormat
。这可能对你有帮助

float x = 1.500000000000002f;
DecimalFormat df = new DecimalFormat("###.######");
long l = df.format(x);
System.out.println("Value of l:"+l);

这是我的老代码高尔夫答案

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;
    }

}
输出:

1
2
1

将浮点值f四舍五入到小数点后2位

String s = String.format("%.2f", f);
要将
字符串
转换为
浮点

float number = Float.valueOf(s)
如果要将
float
四舍五入为
int
,则。。。。 根据您想要实现的结果,有不同的方法将float向下转换为int

舍入(与给定浮点数最接近的整数)

范例

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

我喜欢简单的答案

Math.round(1.6); // Output:- 2
Math.round(1.5); // Output:- 2
Math.round(1.4); // Output:- 1

告诉我:
0.015000000000000002
0.01500000000000000
有多少不同?这不是可以忽略的吗?您是否尝试过DecimalFormatter将小数点后的数字限制为固定值。。。看这个,就是这样。浮点值和双精度值的行为就是这样的,因为并非所有的小数都可以精确表示。如果您需要精确地表示小数点(例如,对于货币值),您可以使用BigDecimal(但计算速度要慢得多)。与您在javahum中的四舍五入相同,它似乎很混乱。如果我使用BigDecimal,我会得到准确的值吗?问题在于,对于相同的输入,iOS会执行正确的结果,Android有时只会给出正确的结果。DecimalFormat返回字符串mate。是的,
DecimalFormat
仅用于指定所需的格式。而format()将接管它。检查
long
不是
String
Hi的输出,这似乎是我需要的输出。你能解释一下你写的数学函数吗?我不完全明白。谢谢,先生,哪一部分?我也可以通过skype来解释:)我对使用int c和float n感到困惑,
int c
用作剪切值,而
float n
保留结果的完整值。由于您的目标是在数字大于1.5时进行四舍五入,因此我将检查是否有余数。我真的很抱歉我不能解释:(1.5没有余数,但1.5002有余数。如果你有浮点数,比如说0.00015或0.00025。在某些点上,它向上取整,有些点向下取整。仍然不是那么准确。无论如何,谢谢你的建议。
Math.round(1.6); // Output:- 2
Math.round(1.5); // Output:- 2
Math.round(1.4); // Output:- 1