首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在操作C#中的数据时,是否应避免使用JavaScript中的十进制类型

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

Stack Overflow用户
提问于 2016-08-24 22:30:26
回答 1查看 98关注 0票数 0

在当前的项目中,我们IMHO使用了太多的十进制类型。例如,在BackEnd (C#)和FrontEnd (JavaScript)中计算的质量(乘法、加法等)。JavaScript中的数字类型总是64位浮点(就像C#中的double ).当转换为十进制和倒转时,会出现转换失败的情况。

问题:在JavaScript中操作的数据是否总是

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

代码语言:javascript
复制
[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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-24 23:05:32

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

通常,数字在处理平台之间是一致的,特别是当数字涉及到金融事务或由于某种原因在UI中具体显示时。

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

如果您要求JS对原始的十进制值进行操作,那么您应该在System.Decimal.ToDouble(System.Decimal)端建立一个使用C#的策略。

如果保持十进制值是最重要的。将涉及十进制值的数值计算()保存在服务器上的一个地方()。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39133980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档