gpt4 book ai didi

javascript - 在 JavaScript 中操作数据时是否应该避免使用 C# 中的十进制类型

转载 作者:行者123 更新时间:2023-12-03 06:15:17 25 4
gpt4 key购买 nike

在当前项目中,恕我直言,我们使用了太多的十进制类型。我们使用 i.e. 来表示 Mass 等在后端 (C#) 和前端 (JavaScript) 中计算(乘法、加法等)的属性。JavaScript 中的数字类型始终是64 位浮点(如 C# 中的 double)。当 double 与十进制数相互转换时,有时会出现转换失败的情况。

问题:在 JavaScript 中操作的数据应该始终是 double 吗?

我创建了一个测试,显示此转换在 C# 中何时会失败。

[Fact]
public void Test()
{
double value = 0.000001d;
value *= 10;
// Console.WriteLine(value); // 9.9999999999999991E-06
ConvertToDecimalAndBack(value);
}

private static void ConvertToDecimalAndBack(double doubleValue)
{
decimal decimalValue = (decimal)doubleValue;

double doubleResult = (double)decimalValue;

Assert.Equal(doubleValue, doubleResult);
}

最佳答案

我解释你的问题“在 JavaScript 中操作的数据应该总是 double 吗?”成为一名有关发展政策的人。正如您和评论所指出的,Javascript 中的最大精度是 double 。此外,正如您所指出的,C# 十进制类型的精度比 double 更高,因此可能会出现转换问题。

一般来说,处理平台之间的数字是一致的,特别是当数字涉及金融交易或由于某种原因专门显示在 UI 中时。

这里有两个选项,具体取决于具体要求。

如果您需要 JS 对原始十进制值进行运算,则应该在 C# 端制定使用 System.Decimal.ToDouble(System.Decimal) 的策略。

如果保留十进制值是最重要的(即它是金钱)将涉及十进制值的数字计算保存在服务器上的一个位置

关于javascript - 在 JavaScript 中操作数据时是否应该避免使用 C# 中的十进制类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39133980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com