Skip to content

Instantly share code, notes, and snippets.

@330k
Created January 4, 2016 13:57
Show Gist options
  • Save 330k/2662b20b978e0a5d3ae5 to your computer and use it in GitHub Desktop.
Save 330k/2662b20b978e0a5d3ae5 to your computer and use it in GitHub Desktop.
Fast Format Function of Float Numbers for LS-DYNA Input Files
private static String formatFloat10(double d){
char[] c = new char[10];
double a;
if(d == 0.0){
return " 0.0000000";
}
if(d < 0){
c[0] = '-';
a = -d;
}else{
c[0] = ' ';
a = d;
}
int m = (int)Math.floor(Math.log10(a));
if(m <= -100){
for(int i = 1; i < 1 - m; i++) a *= 10;
c[1] = (char)('0' + Math.floor(a));
a = (a - Math.floor(a)) * 10;
c[2] = '.';
for(int i = 3; i < 5; i++){
/*c[i] = (char)('0' + Math.floor(a));
a = (a - Math.floor(a)) * 10;*/
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
}
c[5] = 'e';
c[6] = '-';
c[7] = (char)('0' + (-m) * 0.01);
c[8] = (char)('0' + (-m * 0.1) % 10);
c[9] = (char)('0' + (-m) % 10);
}else if(m <= -10){
for(int i = 1; i < 1 - m; i++) a *= 10;
c[1] = (char)('0' + Math.floor(a));
a = (a - Math.floor(a)) * 10;
c[2] = '.';
for(int i = 3; i < 6; i++){
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
}
c[6] = 'e';
c[7] = '-';
c[8] = (char)('0' + (-m) * 0.1);
c[9] = (char)('0' + (-m) % 10);
}else if(m <= -4){
for(int i = 1; i < 1 - m; i++) a *= 10;
c[1] = (char)('0' + Math.floor(a));
a = (a - Math.floor(a)) * 10;
c[2] = '.';
for(int i = 3; i < 7; i++){
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
}
c[7] = 'e';
c[8] = '-';
c[9] = (char)('0' - m);
}else if(m <= -1){
c[1] = '0';
c[2] = '.';
a *= 10;
for(int i = 3; i < 10; i++){
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
}
}else if(m <= 6){
for(int i = 1; i < m + 1; i++) a *= 0.1;
for(int i = 1; i < 10; i++){
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
if(i == m + 1){
c[++i] = '.';
}
}
}else if(m <= 9){
for(int i = 1; i < m + 1; i++) a *= 0.1;
c[1] = (char)('0' + Math.floor(a));
a = (a - Math.floor(a)) * 10;
c[2] = '.';
for(int i = 3; i < 8; i++){
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
}
c[8] = 'e';
c[9] = (char)('0' + m);
}else if(m <= 99){
for(int i = 1; i < m + 1; i++) a *= 0.1;
c[1] = (char)('0' + Math.floor(a));
a = (a - Math.floor(a)) * 10;
c[2] = '.';
for(int i = 3; i < 7; i++){
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
}
c[7] = 'e';
c[8] = (char)('0' + m * 0.1);
c[9] = (char)('0' + m % 10);
}else{
for(int i = 1; i < m + 1; i++) a *= 0.1;
c[1] = (char)('0' + Math.floor(a));
a = (a - Math.floor(a)) * 10;
c[2] = '.';
for(int i = 3; i < 6; i++){
double b = Math.floor(a);
c[i] = (char)('0' + b);
a = (a - b) * 10.0;
}
c[6] = 'e';
c[7] = (char)('0' + m * 0.01);
c[8] = (char)('0' + (m * 0.1) % 10);
c[9] = (char)('0' + m % 10);
}
return new String(c);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment