【问题标题】:how to truncate the float value in javascript如何在javascript中截断浮点值
【发布时间】:2014-04-14 06:47:08
【问题描述】:

我们想在 vb.net 中使用 JavaScript 在表格中显示动态值。我们已将变量定义为 var rValue

表达式是rValue = parseFloat(594 * 0.1);

我们将 putput 设置为 59.400000000000006 但我们需要输出为 59.4 请让我们知道如何做到这一点。

附:我们不想使用tofixed(),因为它会为所有没有小数点的值返回两位小数。

【问题讨论】:

标签: javascript truncate parsefloat


【解决方案1】:

使用rValue = parseFloat(594 * 0.1).toFixed(2),如果小数为 .00,则删除小数位。

例如

var num=rValue.split('.')[1];
        if(num==='00')
        {
         rValue=rValue.split('.')[0];
        }

【讨论】:

    【解决方案2】:

    试试这个:

    var rValue = parseFloat(594 * .2);
    alert(rValue.toFixed(2).replace(".00",""))
    

    here is demo

    【讨论】:

      【解决方案3】:

      使用原生的toPrecision()方法:

       <script>   
       var rValue = new Number(59.400000000000006 );
       var n = rValue.toPrecision(3);
       //n will be 59.4 
       </script>
      

      【讨论】:

      • 如果rValue &gt;= 100怎么办?
      【解决方案4】:

      问题来自0.1 not being able to be represented in binary。它实际上有无限个小数,因此使用这个数字的每个算术运算都会导致输出是近似的。

      您可以选择使用浮点数除以 10:

      var rValue = 594 / 10.0;
      

      或者,如果这种截断是一个反复出现的问题,您可以编写一个实用函数:

      /**
      * @param {Number} value
      * @param {Integer} precision
      * @returns {Number}
      */
      var truncateFloat = function(value, precision) {
          // Ensure the multiplier is a float
          var pMult = 1.0;
          while (precision--) {
              pMult *= 10;
          }
          // Multiply the value by the precision multiplier, 
          // convert it to int (discarding any pesky leftover decimals) 
          // and float-divide it by the same multiplier
          return ((value * pMult) >> 0) / pMult;
      }
      

      希望这会有所帮助! :)

      【讨论】:

        【解决方案5】:

        简单的箭头功能:

        const truncate = (number,decimals) =>
        Math.trunc(number*Math.pow(10,decimals)) / Math.pow(10,decimals)
        

        【讨论】:

          【解决方案6】:

          喜欢这个?

          Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
              Dim rValue As String = 56.40000000006
              Dim charVal() As Char = rValue.ToCharArray()
              Dim getVal As String = Nothing
             '----------Change for decimal places---------
              Dim decimalPlaces As Integer = 2
              Dim decimalPlace As Integer = -1
              Dim realValue As Double = 0
              For Each Val As Char In charVal
          
                  If Char.IsDigit(Val) Then
                      getVal &= Val
                  Else
                      getVal &= "."
                  End If
          
                  If getVal.Contains(".") Then
                      decimalPlace += 1
                  End If
          
                  If decimalPlace = decimalPlaces Then
                      Exit For
                  End If
              Next
              MsgBox(realValue)
          End Sub
          

          【讨论】:

            猜你喜欢
            • 2019-09-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-29
            • 1970-01-01
            • 2013-12-31
            相关资源
            最近更新 更多