相关疑难解决方法(0)

.NET中的decimal,float和double之间的区别?

是什么区别decimal,floatdouble在.NET?

什么时候会有人使用其中一种?

.net floating-point double decimal

2015
推荐指数
15
解决办法
88万
查看次数

为什么.NET使用银行家的舍入作为默认值?

根据文档,该decimal.Round方法使用round-to-even算法,这对于大多数应用程序来说并不常见.所以我总是最终编写一个自定义函数来做更自然的圆半算法:

public static decimal RoundHalfUp(this decimal d, int decimals)
{
    if (decimals < 0)
    {
        throw new ArgumentException("The decimals must be non-negative", 
            "decimals");
    }

    decimal multiplier = (decimal)Math.Pow(10, decimals);
    decimal number = d * multiplier;

    if (decimal.Truncate(number) < number)
    {
        number += 0.5m;
    }
    return decimal.Round(number) / multiplier;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道这个框架设计决策背后的原因?

是否有任何内置的圆形半算法实现到框架中?或者可能是一些非托管Windows API?

对于初学者而言,这可能会产生误导,因为他们只是写了一个decimal.Round(2.5m, 0)期望3但结果是2.

.net rounding

264
推荐指数
4
解决办法
5万
查看次数

什么时候应该使用double而不是decimal?

我可以说使用double(或float)代替以下三个优点decimal:

  1. 使用较少的内存.
  2. 更快,因为处理器本身支持浮点数学运算.
  3. 可以代表更大范围的数字.

但这些优势似乎只适用于计算密集型操作,例如建模软件中的操作.当然,在需要精确度时,不应使用双精度数,例如财务计算.那么有没有任何实际的理由选择double(或float)而不是decimal"正常"的应用程序?

编辑补充:感谢所有伟大的回应,我向他们学习.

还有一个问题:一些人认为双打可以更精确地代表实数.宣布时,我认为他们通常也会更准确地代表他们.但是,当执行浮点运算时,准确度是否会降低(有时是显着的)是真实的说法吗?

c# floating-point double types decimal

257
推荐指数
5
解决办法
5万
查看次数

解析JSON舍入负值

我正在使用NewtonSoft的JSON.NET程序集在C#控制台应用程序中加载.json文件.我想我已经完成了大部分工作,除了我发现一些负浮动值正在被舍入.

这是相关的代码; 正如你所看到的,我曾经尝试都loadparse方法,但相同的结果.

string content;
using (StreamReader reader = new StreamReader("C:\\[Path]\brackett_full_room.json"))
{
  content = reader.ReadToEnd();
}

////  JObject rss = JObject.Load(reader);
JObject rss = JObject.Parse(content);
Run Code Online (Sandbox Code Playgroud)

原始值如下:

"geometry" : {  "rings" : [   [   [  -9221300.3411999997, 4120326.8838  ],
    [  -9221300.2146000005,  4120327.992399998  ]...
Run Code Online (Sandbox Code Playgroud)

但是-9221300.3411999997变得像-9221300.3412rss变,这是导致坐标到不行; 长期正面值很好.

是否有某种方法可以保持足够高的精度(即如果解析为具有足够的数字double而不是float)?

c# rounding json.net

1
推荐指数
1
解决办法
1034
查看次数

标签 统计

.net ×2

c# ×2

decimal ×2

double ×2

floating-point ×2

rounding ×2

json.net ×1

types ×1