Advertisement
Guest User

Float to String conversion, with precision, for Haxe

a guest
Jan 24th, 2018
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 2.25 KB | None | 0 0
  1.     private var cutOff:Int64 = 0;
  2.     private var decimalOffSet:Int = 1;
  3.     function getFloatStringWithPrecision(_v:Float):String {
  4.         if (_v % 1 == 0) { //if number is whole just return
  5.             return "" + _v;
  6.         }
  7.         var _locIsNegative:Bool = false;
  8.         var _locFloat64:Float = _v;
  9.         if (_locFloat64 < 0) {
  10.             _locFloat64 *= -1;
  11.             _locIsNegative = true;
  12.         }
  13.         var _locInt64:Int64 = Int64.fromFloat(_locFloat64); //this forces rounding and prevents initial overflow
  14.         var _locBuildString:String = "" + _locInt64;
  15.         this.cutOff = this.getCutOffValue(_locFloat64);
  16.         while (true) {
  17.             _locFloat64 *= 10;
  18.             _locInt64 = Int64.fromFloat(_locFloat64);
  19.             var tempString = "" + _locInt64;
  20.             _locBuildString += tempString.substring(tempString.length - 1, tempString.length);
  21.             if (_locFloat64 > this.cutOff.low) { //subtract a semi-arbitrary value to further prevent overflow
  22.                 var sub:Int64 = (Int64.fromFloat(_locFloat64) / cutOff) * cutOff;
  23.                 _locFloat64 -= sub.low;
  24.             }
  25.             if (_locBuildString.length >= 17) { //This if statement is called when the string is technically a Float32. Change to 33 to make it a Float64
  26.                 _locBuildString = this.truncate(_locBuildString); //Cut off any remaining zeros
  27.                 var forString:String = _locBuildString.substring(0, decimalOffSet);
  28.                 var latString:String = _locBuildString.substring(decimalOffSet, _locBuildString.length);
  29.                 var signString:String = "";
  30.                 if (_locIsNegative) {
  31.                     signString = "-";
  32.                 }
  33.                 var returnString:String = signString + forString + "." + latString;
  34.                 return returnString;
  35.             }
  36.         }
  37.     }
  38.     function truncate(_s:String):String { //Cut off any remaining zeros
  39.         var _locString:String = _s;
  40.         while (true) {
  41.             if (_locString.substring(_locString.length - 1, _locString.length) == "0") {
  42.                 _locString = _locString.substring(0, _locString.length - 1);
  43.             } else {
  44.                 return _locString;
  45.             }
  46.         }
  47.     }
  48.     function getCutOffValue(_v:Float):Int64 { //Finds decimal offset and cut off value. A number of X00 will return a value of 100, X000 = 1000, etcetera. 3400 with cut off of 100 will instruct 3400 - 3000.
  49.         var mod:Int = 1;
  50.         this.decimalOffSet = 1;
  51.         while (true) {
  52.             if (_v / mod > 10) {
  53.                 ++decimalOffSet;
  54.                 mod *= 10;
  55.                 continue;
  56.             } else {
  57.                 return mod;
  58.             }
  59.         }
  60.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement