- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
/**
* Форматирует double, c arround кол-вом знаков после запятой
* @param d double
* @param arround int
* @return String
*/
public static String formatDouble(double d, int arround) {
if (arround > 6) {
throwIllegalFormat();
}
StringBuffer sb = new StringBuffer(10);
boolean minus = d < 0;
if (minus) {
d = -d;
}
for (int i = 0; i < arround; i++) {
d *= 10;
}
long l = (long) (d + 0.000000001);
do {
char digit = (char) ('0' + (l % 10));
l = l / 10;
sb.append(digit);
if (--arround == 0) {
sb.append('.');
}
} while (l != 0 || arround >= 0);
if (minus) {
sb.append('-');
}
return sb.reverse().toString();
}
spivti 02.10.2013 14:10 # 0
п.с. зачем изобретать свой велосипед.
roman-kashitsyn 02.10.2013 14:21 # +1
anonimb84a2f6fd141 02.10.2013 15:34 # +1
EfremoffPaul 02.10.2013 14:35 # +2
Школьник бы не написал throwIllegalFormat(), это был бы перебор.
Нет проверки на слишком большое double d и переполнение long, по-видимому, d это проценты. Но тогда -100% (слив депо) в буфер не влезут, однако. По-видимому, это уже будет неважно, клиент в состоянии аффекта разобьёт девайс о стену.
Для полного драйва можно было бы не пользоваться приведением к long, а вытащить мантиссу из double.
Lure Of Chaos 02.10.2013 18:46 # 0
причем автор знает и StringBuffer, и StringBuffer.reverse()