Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private var cutOff:Int64 = 0;
- private var decimalOffSet:Int = 1;
- function getFloatStringWithPrecision(_v:Float):String {
- if (_v % 1 == 0) { //if number is whole just return
- return "" + _v;
- }
- var _locIsNegative:Bool = false;
- var _locFloat64:Float = _v;
- if (_locFloat64 < 0) {
- _locFloat64 *= -1;
- _locIsNegative = true;
- }
- var _locInt64:Int64 = Int64.fromFloat(_locFloat64); //this forces rounding and prevents initial overflow
- var _locBuildString:String = "" + _locInt64;
- this.cutOff = this.getCutOffValue(_locFloat64);
- while (true) {
- _locFloat64 *= 10;
- _locInt64 = Int64.fromFloat(_locFloat64);
- var tempString = "" + _locInt64;
- _locBuildString += tempString.substring(tempString.length - 1, tempString.length);
- if (_locFloat64 > this.cutOff.low) { //subtract a semi-arbitrary value to further prevent overflow
- var sub:Int64 = (Int64.fromFloat(_locFloat64) / cutOff) * cutOff;
- trace(_locFloat64, sub);
- _locFloat64 -= sub.low;
- }
- if (_locBuildString.length >= 17) { //This if statement is called when the string is technically a Float32. Change to 33 to make it a Float64
- _locBuildString = this.truncate(_locBuildString); //Cut off any remaining zeros
- var forString:String = _locBuildString.substring(0, decimalOffSet);
- var latString:String = _locBuildString.substring(decimalOffSet, _locBuildString.length);
- var signString:String = "";
- if (_locIsNegative) {
- signString = "-";
- }
- var returnString:String = signString + forString + "." + latString;
- return returnString;
- }
- }
- }
- function truncate(_s:String):String { //Cut off any remaining zeros
- var _locString:String = _s;
- while (true) {
- if (_locString.substring(_locString.length - 1, _locString.length) == "0") {
- _locString = _locString.substring(0, _locString.length - 1);
- } else {
- return _locString;
- }
- }
- }
- 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.
- var mod:Int = 1;
- this.decimalOffSet = 1;
- while (true) {
- if (_v / mod > 10) {
- ++decimalOffSet;
- mod *= 10;
- continue;
- } else {
- return mod;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement