0

我有一个指数数:4.65661287307739E-10

当我使用 JavaScript 将其四舍五入时,它被转换为 5。我使用以下代码

  var roundFormattedNumber = function (n) {
                    var val = parseFloat(n.replace(/[^0-9.]/g, '')).toFixed(0);
                    Ext.util.Format.thousandSeparator = ',';
                    Ext.util.Format.decimalSeparator = '.';
                    return Ext.util.Format.number(val, '0,000');
                };

当我尝试首先使用 C# 将此数字解析为十进制时,我得到:0.000000000465661287307739M

decimal amount;
decimal.TryParse("4.65661287307739E-10", NumberStyles.Any, CultureInfo.InvariantCulture, out amount);

如果我使用 C# 对这个值进行四舍五入,结果将与 JavaScript 结果不同。

为什么有区别?哪个结果正确?

请建议。

谢谢

4

1 回答 1

0

当我使用 JavaScript 对其进行四舍五入时,它被转换为 5。

那不是 JavaScript,那是你的代码。您正在从字符串中删除不是数字或 a 的所有内容.

var val = parseFloat(n.replace(/[^0-9.]/g, '')).toFixed(0);
// -------------------^^^^^^^^^^^^^^^^^^^^^^^^

......所以你转

4.65661287307739E-10

进入

4.6566128730773910

然后解析它,这自然会给你一个完全不同的数字4.65661287307739E-10。没有必要这样做,JavaScriptparseFloat可以解释 E-notation。

而在您的 C# 代码中,您实际上是在为TryParse函数提供 E-notation 编号。

为什么有区别?

因为在一种情况下,您会在要求 JavaScript 解析字符串之前从字符串中删除非常重要的信息。

哪个结果正确?

C# 之一(虽然我不知道为什么它M的末尾有一个)。

于 2013-09-10T10:43:57.910 回答