将javascript中的十进制数字表示为“%g";C语言格式

将javascript中的十进制数字表示为“%g";C语言格式,javascript,string,floating-point,Javascript,String,Floating Point,我有一个生成为有限小数的数字: var x = k * Math.pow(10,p) 用k和p整数。有没有简单的方法将其转换为精确的字符串表示形式 如果我使用隐式字符串转换,我会得到难看的结果: ""+ 7*Math.pow(10,-1) 给予 我尝试使用.toFixed和.toPrecision,但根据k和p很难找到正确的精度。有没有办法获得C语言的良好的旧“%g”格式?也许我应该求助于外部库?您可以像这样创建自己的楼层功能,使用选项准确性 函数fixRound(数字、精度){ 返回“”

我有一个生成为有限小数的数字:

var x = k * Math.pow(10,p)
用k和p整数。有没有简单的方法将其转换为精确的字符串表示形式

如果我使用隐式字符串转换,我会得到难看的结果:

""+ 7*Math.pow(10,-1)
给予


我尝试使用.toFixed和.toPrecision,但根据k和p很难找到正确的精度。有没有办法获得C语言的良好的旧“%g”格式?也许我应该求助于外部库?

您可以像这样创建自己的
楼层
功能,使用选项
准确性

函数fixRound(数字、精度){
返回“”+数学楼层(数字*(精度| 1))/精度| 1;
}
设num=7*Math.pow(10,-1);

console.log(fixRound(num,1000))
可以使用库中的
数学格式

给予

"0.7"

你说的精确字符串表示法是什么意思?您期望的输出是什么?形式为“k*pow(10,p)”的数字具有有限的十进制展开。我想得到准确的扩展与所需的最少数字。在示例中:0.7I也缺少它:像c/php/这样的js函数<代码>printf()函数!!
fixRound
中的算法无法工作,因为.7在JavaScript
Number
格式中不可精确表示,因此任何计算都无法将数字精确舍入为.7。它可以非常接近,默认格式将打印“.7”,因此这种混乱可能出于某些目的。但是,
fixRound
在乘法和除法中也会出现舍入错误。OP发出的请求应该通过使用格式化功能(在内部处理到十进制的转换以及避免额外舍入错误的计算)来解决,而不是试图伪造算术。
math.format(7 * Math.pow(10, -1), {precision: 14});
"0.7"