如何可靠地将浮点数格式化为Haxe中指定的小数位数

tin*_*lyx 3 floating-point haxe

我想知道是否有一种reliable方法可以将Float xhaxe 转换String为指定的小数位数(例如3)。

一个直接的方法是首先转换x为字符串表示,然后修剪一切小数点之后的给定数目的字符之后.,如图所示在这里。但是,如果某个平台显示数字0.0111为,会发生什么1.11e-2

我似乎也找不到“ printfhaxe”,这将允许我以正确的方式格式化数字。我想知道在haxe中执行此操作的最佳实践是什么。

我想在结果中获取字符串,因为在某些系统中,浮点数为您提供了例如0.19999.. from的信息2/10.0。仅截断小数点后的某些字符将是不准确的。

str*_*ium 5

public static function floatToStringPrecision(n:Float, prec:Int){
  n = Math.round(n * Math.pow(10, prec));
  var str = ''+n;
  var len = str.length;
  if(len <= prec){
    while(len < prec){
      str = '0'+str;
      len++;
    }
    return '0.'+str;
  }
  else{
    return str.substr(0, str.length-prec) + '.'+str.substr(str.length-prec);
  }
}
Run Code Online (Sandbox Code Playgroud)

在某些平台上,舍入可能在大数(> MAX_INT)上失败,因此对于这种情况,您需要自己的舍入函数。