Javascript 分离和裁剪以及四舍五入

Posted

技术标签:

【中文标题】Javascript 分离和裁剪以及四舍五入【英文标题】:Javascript separation and cropping and round digits 【发布时间】:2016-10-24 15:41:08 【问题描述】:

我对这个简短的脚本有疑问。脚本必须显示像这样的数字 10 987.23 或 10 987(点后是否有 2 个符号),但显示 NaN。我做错了什么?

<script>
var dohzavershen = "10 987.23456457457"; // corrected
dohzavershen = dohzavershen.replace(/.+?(?=\D|$)/, 
  function(f) 
    return f.replace(/(\d)(?=(?:\d\d\d)+$)/g, "$1 ")
  ;
);

document.write(Number(dohzavershen).toFixed(0));

<script>

【问题讨论】:

您正在将字符串转换为不是数字的有效表示形式,然后尝试将其解析为数字。这就是你得到 NaN 的原因。 @JLRishe 但在这个字符串中是一个数字 (var dohzavershen = "10 987.2345789099888"; 它仍然不是 javascript 中的有效数字。数字中不能有空格。 Number("10 987.23456457457") 计算结果为 NaN @SergNuvels 有效数字在 JavaScript 中没有空格。 您尝试使用的方法没有任何意义。 toFixed() 返回一个数字,表示为一系列没有分隔符的数字,可选地后跟一个小数点和更多数字。您要做的是将字符串转换为您想要的数字格式,然后将其转换为数字,然后调用.toFixed()。没有办法行得通。你需要想出一种不同的方法。 【参考方案1】:
var dohzavershen = "10 987.23456457457"; // corrected

function formatter(n, k) 
   var split = n.split('.');
   if (split.length > 1) 
      split[split.length-1] = split[split.length-1].substring(0, k);
   
   return k > 0 ? split.join('.') : split[0];


formatter(dohzavershen, 2)

这样的事情可能会奏效。但请注意,这不会对数字进行四舍五入,而只是选择小数点后的前两位。 k>0 只是为了确保你没有得到“1234”,你可以用任何你认为合适的方式来处理它

【讨论】:

谢谢,但没用。圆形对我来说很重要。那是个问题..这个完整的代码 """ var oriprice = $origprice; document.write(Number(oriprice).toFixed(0)); """ 工作完美,但不要四舍五入.. 我不明白如何解决我的问题( 没用是什么意思?我认为你的数字之间的空间很重要。有了它,尝试将其转换为数字将不起作用。 完整代码看起来像 php $resultoursalerealpricesum = mysql_query("SELECT SUM(order_price) from tbl_orders WHERE status='Завершен'"); if ($topmenuZavershen!=0) ?> 我只是用 '.' 分割字符串并通过格式化再次加入它。如果您希望将其四舍五入到零小数点,只需调用 formatter(yourvariable,0)

以上是关于Javascript 分离和裁剪以及四舍五入的主要内容,如果未能解决你的问题,请参考以下文章

如果在函数中将数字四舍五入,则将其四舍五入

java保留小数点后四舍五入的问题

JS怎样做四舍五入

Javascript 和 C# 四舍五入

JS处理数据四舍五入,tofixed与round的区别

JavaScript学习篇