繁体   English   中英

小数点,带逗号到字符串,但小数点后仅2位

[英]decimal with comma to string but with only 2 places after decimal

我在Webservice中使用逗号获取十进制值。

例如:0 | 000 | 12,21365659697 | 11,125487654。

我想要的是字符串,但逗号后只有2个值。

我试过了

初始化-

decimal val=0m;
decimal val2=0m;

从网络服务获取数据并映射到我的领域:

"val": val = Convert.ToDecimal(GETDATA.GETDATA[0].GETDATA[i].GETDATA.N_VALUE); 

并将此值转换为string后,将其发送到我的SQL,列定义为varchar。

public static string getdecimalSqlString(decimal decvar)
{            
    return decvar.ToString("#,##", CultureInfo.InvariantCulture);
}

我认为这很好,但是我的问题是如果我没有得到值,那么如果我在给定条件下转换val2,它将失败。

另外,如果我使用可为空的十进制进行初始化,则不能使用formatting。

谢谢

PS-我可能会或可能不会得到十进制(逗号而不是十进制),并且需要字符串而不是十进制,但逗号后面只有2个位

方法1 :这是正确的方法吗?

  return decvar.ToString("#.##", new CultureInfo("en-US", true));

Approach2还是这个?

public static string getdecimalSqlString(decimal? decvar1)
        {
          string a=  decvar1.HasValue? decvar1.Value.ToString("#,##") : string.Empty;
            //return decvar.ToString("#.##", new CultureInfo("en-US", true));
            return a;
        }

返回带有逗号分隔的十进制值的Web服务是一个红色标记。 通常,这意味着Web服务的开发人员已使用CurrentCulture格式化了字符串,这恰好是一种以逗号作为小数点分隔符的区域性。 如果是这样,将服务移至具有不同区域性的服务器可能会更改其返回的小数点分隔符。

因此,我将首先尝试与Web Service的开发人员确认是否有意返回逗号分隔符,或者是否应将其设为不变的句点分隔符。

要获取十进制值,您需要使用适当的区域性进行分析( Culture.InvariantCulture可能最适合于句点分隔符,而使用逗号分隔的区域性示例是new CultureInfo("fr-FR")

Decimal.TryParse(value, NumberStyles.Number, myCulture, out result)

有了十进制值后,就可以使用Math.Round舍入到小数点后Math.Round

您在getDecimalSqlString中的代码是错误的:

return decvar.ToString("#,##", CultureInfo.InvariantCulture);

格式说明符应为“#。##”,如果要使用逗号分隔符,则应指定使用一个的区域性。

最后,你说

并将其转换为字符串后,将该值发送到我的SQL,并将其列定义为varchar

在大多数情况下,在SQL查询中使用十进制之前,不应将其转换为字符串。 相反,您应该在查询中使用带十进制值的参数。

也许这会有所帮助

public decimal _MFormatNo(string _value, int _pFractions = 2)
{
    decimal _pvalue = Convert.ToDecimal (_value.Remove(','));
    string _Format = ".";
    string Value = "";
    for (int i = 0; i < _pFractions; i++)
    {
        _Format += "0";
    }
    if (_pvalue == 0)
    {
        Value = "0" + _pvalue.ToString(_Format);
    }
    Value = (_pvalue).ToString(_Format);
    return Convert.ToDecimal(Value);
}

更新:根据OP要求,因为她要输出字符串

public string _MFormatNo(string _value, int _pFractions = 2)
{
    decimal _pvalue = Convert.ToDecimal(_value.Remove(','));
    string _Format = ".";
    string Value = "";
    for (int i = 0; i < _pFractions; i++)
    {
        _Format += "0";
    }
    if (_pvalue == 0)
    {
        Value = "0" + _pvalue.ToString(_Format);
    }
    Value = (_pvalue).ToString(_Format);
    return Value;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM