Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C不四舍五入_C#_Json_Linq_Linq To Sql_Asp.net Mvc 4 - Fatal编程技术网

C# C不四舍五入

C# C不四舍五入,c#,json,linq,linq-to-sql,asp.net-mvc-4,C#,Json,Linq,Linq To Sql,Asp.net Mvc 4,当我将此对象作为JSON传回时,它如下所示: 0.000000000000000 E+000 我的C代码是: // get adjustments for user IEnumerable<Severity> existingSeverities = from s in db.AdjusterPricingGrossLossSeverities where s.type == type && s.adjusterID == adj.id

当我将此对象作为JSON传回时,它如下所示:

0.000000000000000 E+000

我的C代码是:

// get adjustments for user
IEnumerable<Severity> existingSeverities = 
    from s in db.AdjusterPricingGrossLossSeverities
    where s.type == type
    && s.adjusterID == adj.id
    select new Severity
    {
        id = s.severity,
        adjustment = Math.Round((double)s.adjustment, 2, MidpointRounding.AwayFromZero).ToString(),
        isT_E = (bool)s.isTimeAndExpense
    };
如何将其四舍五入到小数点后两位0.00?

使用

dec.ToString("#.##");
有关更多信息,请参阅

如果它是控制台应用程序中的可空双精度

使用

有关更多信息,请参阅

如果它是控制台应用程序中的可空双精度

试试这个:

// get adjustments for user
IEnumerable<Severity> existingSeverities = 
from s in db.AdjusterPricingGrossLossSeverities
where s.type == type
&& s.adjusterID == adj.id
select new Severity
{
    id = s.severity,
    adjustment = s.adjustment.GetValueOrDefault().ToString("0.##"),
    isT_E = (bool)s.isTimeAndExpense
 };
-编辑,第2部分-

// get adjustments for user
IEnumerable<Severity> existingSeverities = 
from s in db.AdjusterPricingGrossLossSeverities
where s.type == type
&& s.adjusterID == adj.id
select new Severity
{
    id = s.severity,
    SetAdjustment = s.adjustment.GetValueOrDefault(),
    isT_E = (bool)s.isTimeAndExpense
 };
代码的其余部分不需要更改,它仍应使用Severity variable.adjustment作为正常设置。这只是为了回避这样一个事实,即无法保证将.Net转换为SQL,更不用说任何自定义格式了。

尝试以下方法:

// get adjustments for user
IEnumerable<Severity> existingSeverities = 
from s in db.AdjusterPricingGrossLossSeverities
where s.type == type
&& s.adjusterID == adj.id
select new Severity
{
    id = s.severity,
    adjustment = s.adjustment.GetValueOrDefault().ToString("0.##"),
    isT_E = (bool)s.isTimeAndExpense
 };
-编辑,第2部分-

// get adjustments for user
IEnumerable<Severity> existingSeverities = 
from s in db.AdjusterPricingGrossLossSeverities
where s.type == type
&& s.adjusterID == adj.id
select new Severity
{
    id = s.severity,
    SetAdjustment = s.adjustment.GetValueOrDefault(),
    isT_E = (bool)s.isTimeAndExpense
 };

代码的其余部分不需要更改,它仍应使用Severity variable.adjustment作为正常设置。这只是为了回避这样一个事实,即无法保证将.Net转换为SQL,更不用说任何自定义格式了。

事实证明,这是一个LINQ到SQL的问题。我这样做了,而且很有效

// get adjustments for user
IEnumerable<Severity> existingSeverities = 
    from s in db.AdjusterPricingGrossLossSeverities
    where s.type == type
    && s.adjusterID == adj.id
    select new Severity
    {
        id = s.severity,
        adjustment = roundtest(s.adjustment.GetValueOrDefault()),
        isT_E = (bool)s.isTimeAndExpense
    };

// test method...
public string roundtest(double num)
{
    return num.ToString("#.##");
}

事实证明,这是一个LINQ到SQL的问题。我这样做了,而且很有效

// get adjustments for user
IEnumerable<Severity> existingSeverities = 
    from s in db.AdjusterPricingGrossLossSeverities
    where s.type == type
    && s.adjusterID == adj.id
    select new Severity
    {
        id = s.severity,
        adjustment = roundtest(s.adjustment.GetValueOrDefault()),
        isT_E = (bool)s.isTimeAndExpense
    };

// test method...
public string roundtest(double num)
{
    return num.ToString("#.##");
}

我认为你混淆了两件事。真正的数字不是你所看到的。实数以二进制格式存储在内部。您看到的十进制数字在此内部格式中不存在。您看到的是将该值转换为字符串形式的十进制表示形式

将任何内部二进制表示形式转换为人类可见字符串称为格式化。Round函数没有格式化。请参见此示例:

double x = 0.123456000000000e+000;
double y = Math.Round(x, 2, MidpointRounding.AwayFromZero);
// y ====> 0.120000000000000e+000;
舍入函数更改内部值。您需要的可能不是更改值,而是仅用两位数字显示未更改的值:

string formattedValue = x.ToString("N2");

如果您使用的是货币,请使用十进制而不是双精度。十进制在内部使用二进制编码的十进制格式。在计算机中,像1/10这样的值不能精确地表示为二进制数,就像1/7不能精确地表示为十进制表示法0.142857142857。。。。但是,当1/10存储为十进制时,它有一个精确的内部表示。

我认为你混淆了两件事。真正的数字不是你所看到的。实数以二进制格式存储在内部。您看到的十进制数字在此内部格式中不存在。您看到的是将该值转换为字符串形式的十进制表示形式

将任何内部二进制表示形式转换为人类可见字符串称为格式化。Round函数没有格式化。请参见此示例:

double x = 0.123456000000000e+000;
double y = Math.Round(x, 2, MidpointRounding.AwayFromZero);
// y ====> 0.120000000000000e+000;
舍入函数更改内部值。您需要的可能不是更改值,而是仅用两位数字显示未更改的值:

string formattedValue = x.ToString("N2");

如果您使用的是货币,请使用十进制而不是双精度。十进制在内部使用二进制编码的十进制格式。在计算机中,像1/10这样的值不能精确地表示为二进制数,就像1/7不能精确地表示为十进制表示法0.142857142857。。。。但是,当1/10存储为十进制时,它有一个精确的内部表示。

为什么?小数点仅在呈现给用户时才起作用。它四舍五入到小数点后2位,但它仍然存储为双精度,根据定义,这是更多的小数点。正如Henk所说,您需要以JavaScript的形式呈现。@ElRonnoco我将其存储为字符串调整是字符串,而s.adjustment是字符串double@HenkHolterman我把它当作一根弦传递,而不是一个双音。所以,这里的陈述很重要。@GrantWinney s.adjustment是一个?double可选的double。然而,调整是字符串。为什么?小数点仅在呈现给用户时才起作用。它四舍五入到小数点后2位,但它仍然存储为双精度,根据定义,这是更多的小数点。正如Henk所说,您需要以JavaScript的形式呈现。@ElRonnoco我将其存储为字符串调整是字符串,而s.adjustment是字符串double@HenkHolterman我把它当作一根弦传递,而不是一个双音。所以,这里的陈述很重要。@GrantWinney s.adjustment是一个?double可选的double。但是,调整是字符串。语法错误:“ToString”的重载方法不接受1个参数。代码:adjustment=s.adjustment.ToString.,@user1477388那么您确定s.adjustment是双精度的吗?@Tory它是双精度的,因此是强制转换。@Grantwiney现在,我得到了一个LINQ到SQL错误方法'System.String ToStringSystem.String'不支持到SQL的转换。但至少更接近。如果它在数据库中存储为可为null的双精度,我会认为,将字符串放入其中会有点麻烦。语法错误:“ToString”的无重载方法接受1个参数。代码:adjustment=s.adjustment.ToString.,@user1477388那么您确定s.adjustment是双精度的吗?@Tory它是双精度的,因此是强制转换。@Grantwiney现在,我得到了一个LINQ到SQL错误方法'System.String ToStringSystem.String'不支持到SQL的转换。但是
至少更接近了。如果它在数据库中存储为可为null的double,我会想,你将需要在其中插入一个字符串。谢谢,但我得到的错误方法“System.string ToStringSystem.string”不支持转换为SQL。我如何在LINQ to SQL查询的上下文中使用你的方法?谢谢,但是我得到的错误方法“System.String-ToStringSystem.String”不支持转换为SQL。如何在LINQ-to-SQL查询的上下文中使用您的方法?谢谢,这很有意义。然而,这最终不会像内联的那样工作,因为LINQ到SQL的工作方式是这样的。唯一对我有效的解决方案是我找到的并贴在这里的。谢谢,这是有道理的。然而,这最终不会像内联的那样工作,因为LINQ到SQL的工作方式是这样的。唯一对我有效的解决方案是我在这里找到并发布的解决方案