2013-11-15 3 views
0

Привет, я очень плохо скругляю. я пытаюсь округлить ценность округления моей валюты страны.Android - Как настроить значение округления?

скругления пример будет:

1.01 > 1.00
1.02 > 1.00
1.03 > 1.05
1.04 > 1.05
1.06 > 1.05
1.07 > 1.05
1.08 > 1.10
1.09 > 1.10
Как я могу сделать этот вид округления? Большое спасибо .

+3

Сторона комментария: вы не говорите, какой тип вашего номера. Все считают, что это «двойник». Но не рекомендуется использовать 'float' или' double' при работе с валютой, потому что они не представляют большинство чисел точно. Посмотрите на [BigDecimal] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html). – ajb

ответ

0

Это, кажется, чтобы дать вам правильные отображения - вам, возможно, потребуется настроить его, когда вы решите, где именно обрезания есть.

public void test() { 
    double [] tests = new double[] {1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9}; 
    for (double d : tests) { 
    System.out.println(" "+d + " -> "+round(d, .05, 0.5)); 
    } 
} 

double round(double d, double fraction, double bias) { 
    return Math.floor(d/fraction + bias) * fraction; 
} 

Печатается:

1.01 -> 1.0 
1.02 -> 1.0 
1.03 -> 1.05 
1.04 -> 1.05 
1.05 -> 1.05 
1.06 -> 1.05 
1.07 -> 1.05 
1.08 -> 1.1 
1.09 -> 1.1 
+0

жаль, что я отредактировал мой вопрос, теперь должен быть правильный вопрос. THanks – AndroidWorld12

+0

@ AndroidWorld12 - Я также редактировал свой ответ. – OldCurmudgeon

0
double roundedvalue= Math.round(YourValue* 100.0)/100.0; 
0
double roundedvalue= Math.round(YourValue* 2.0)/2.0; 
+0

Примечание для всех, кто читает это: этот ответ был правильным, прежде чем вопроситель отредактировал вопрос и изменил числа. – ajb

0

Math.round позволяет вам округлить число до ближайшего целого числа. Похоже, вы пытаетесь округлить до ближайшего кратного 0.5. Общий способ решения таких проблем, как это

roundedValue = Math.round (X/M) * M; 

округлять до ближайшего кратного M. Так что в вашем случае это будет

roundedValue = Math.round (X/0.5) * 0.5; 

, который так же, как

roundedValue = Math.round (X * 2.0)/2.0; 

Точно так же, если вы хотите, чтобы закруглить что-то до ближайшего кратного, скажем, 0,01, один из них будет работать:

roundedValue = Math.round (X/0.01) * 0.01; 
roundedValue = Math.round (X * 100.0)/100.0; 

EDIT: похоже, вы изменили свой вопрос, так что я говорил ранее о округление до ближайшего числа, кратного 0,5 не исправить больше, и теперь вы округляете до ближайшего кратного 0,05. Во всяком случае, общий метод, который я обсуждал, все еще работает.

0

Посмотрите на документацию http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html по математическому классу. Он позволяет выполнять такие операции, как Math.round(double x) и Math.ceil(double x) и Math.floor(double x). Вы можете использовать их в сочетании с оператором if else, таким как

double value = 1.6; 

String valueToString = Double.toString(value); 
String [] numbers = valueToString.split("."); 
String decimalNums = numbers[1]; 
int decimal = Integer.parseInt(decimalNums); 

if(decimal > 0 && decimal < 5){ 
    decimal = Math.floor(decimal); 
}else if(decimal >= 5 && decimal < 8){ 
    decimal = 5; 
}else{ 
    decimal = Math.ceil(decimal); 
} 

Это будет работать только для значений с одним десятичным знаком. Но это начало. Надеюсь, это поможет немного.

1

Похоже, вы округлились на 0.05 = 1/20. Таким образом, следующие работы:

public static double roundCurrency(double value) { 
    return Math.round(value * 20.0)/20.0; 
} 
Смежные вопросы