在输入框中仅显示小数点后两位?

时间:2018-10-06 15:27:55

标签: jquery html floating-accuracy

我正在构建一个计算器,用户可以在该计算器中在英制和公制之间来回转换。

我的代码如下:

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
newConvertedVal = parseFloat((oldVal * 0.1589873).toFixed(2));
jQuery(this).val(newConvertedVal);

我正在使用.toFixed(2),因为我将数字修整为2个小数位。我唯一的问题是,如果我使用以下方法进行转换:

newConvertedVal = parseFloat((oldVal / 0.1589873).toFixed(2));

然后它将不会返回完全相同的数字,因为它们已经四舍五入了。

由于这个原因,我想停止使用.toFixed(2),但是随后我的应用程序将显示一些冗长的浮点数。

是否有办法使用完整数字进行转换,但仅显示数字到最后两位小数?我已经看过在html(https://www.w3schools.com/tags/att_pattern.asp)中使用pattern属性,但是Safari不支持。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

  

我唯一的问题是如果我转换回来...

由于您一直想舍弃一些小数位,因此转换回去是行不通的。与数学有关的不仅仅是编码。

因此,您必须将“真实”结果保留在变量中以供转换回...并显示另一个已删除小数的变量。

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
newConvertedVal = oldVal * 0.1589873;  // Keep that one!

newConvertedVal_toDisplay = newConvertedVal.toFixed(2);
jQuery(this).val(newConvertedVal_toDisplay);

然后:

// Conversion back
converterdBack = (newConvertedVal / 0.1589873);  // Or squarely use oldVal !?!

如果该代码位于子函数中,并且需要存储该数字以供以后转换,则可以使用以下选项:localStoragedata-*属性,结果对象...

答案 1 :(得分:0)

我将使用数据功能来存储数字:

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
var val = (oldVal * 0.1589873);
jQuery(this).data("numberValue", val);
jQuery(this).val(parseFloat(val.toFixed(2)));

您可以稍后以这种方式将其取回(假设此时仍在上下文中):

var theValue = parseFloat(jQuery(this).data("numberValue"));