在当前的项目中,我们IMHO使用了太多的十进制类型。例如,在BackEnd (C#)和FrontEnd (JavaScript)中计算的质量(乘法、加法等)。JavaScript中的数字类型总是64位浮点(就像C#中的double ).当转换为十进制和倒转时,会出现转换失败的情况。
问题:在JavaScript中操作的数据是否总是双?
我创建了一个测试,它显示了在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);
}发布于 2016-08-24 23:05:32
我解释你的问题:“在JavaScript中操作的数据应该总是加倍吗?”成为一个关于发展政策的人。正如您和评论所指出的,Javascript中的最大精度是double。此外,正如您所指出的,C#十进制类型比double具有更高的精度,因此可能会出现转换问题。
通常,数字在处理平台之间是一致的,特别是当数字涉及到金融事务或由于某种原因在UI中具体显示时。
这里有两个选项,取决于具体的需求。
如果您要求JS对原始的十进制值进行操作,那么您应该在System.Decimal.ToDouble(System.Decimal)端建立一个使用C#的策略。
如果保持十进制值是最重要的。将涉及十进制值的数值计算()保存在服务器上的一个地方()。
https://stackoverflow.com/questions/39133980
复制相似问题