十进制,逗号到字符串,但小数后只有2个位置

时间:2017-11-03 08:10:53

标签: c#

我在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); 

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

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

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

另外,如果我使用可空的十进制来初始化,我就不能使用格式化。

由于

P.S。 - 我可能会或可能不会得到小数(逗号而不是小数)并且需要字符串而不是小数,但逗号后只有2个位置)

Approach1 :这是正确的方法吗?

  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;
        }

2 个答案:

答案 0 :(得分:1)

使用逗号分隔符返回小数值的Web Service是一个红色标记。通常,这意味着Web服务的开发人员使用CurrentCulture格式化了字符串,这恰好是一个以逗号作为小数分隔符的文化。如果是这样,将服务移动到具有不同文化的服务器可能会更改它返回的小数分隔符。

因此,我首先尝试与Web服务的开发人员确认是否故意返回逗号分隔符,或者它是否应该是一个不变的句点分隔符。

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

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

获得小数值后,可以使用Math.Round舍入到小数点后两位。

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

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

格式说明符应为&#34;#。##&#34;如果你想要一个逗号分隔符,你应该指定一个使用一个文化的文化。

最后,你说

  

将此值转换为我的SQL,并将其转换为字符串

后定义为varchar的列

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

答案 1 :(得分:0)

也许这会有用

$conversations = [
        [
            'id' => 'c1',
            'messages' => [
                [
                    'id' => 'm1',
                    'content' => 'Herewith the attachments',
                    'attachments' => [
                        [
                            'id' => 'a1',
                            'message_id' => 'm1',
                            'filename' => 'something.pdf'
                        ],
                        [
                            'id' => 'a2',
                            'message_id' => 'm1',
                            'filename' => 'somethingelse.pdf'
                        ]
                    ]
                ],
                [
                    'id' => 'm2',
                    'content' => 'Ah, thanks'
                ],
                [
                    'id' => 'm3',
                    'content' => 'What about the invoice?'
                ],
                [
                    'id' => 'm4',
                    'content' => 'Oh shoot, here it is',
                    'attachments' => [
                        [
                            'id' => 'a3',
                            'message_id' => 'm4',
                            'filename' => 'invoice.pdf'
                        ]
                    ]
                ]
            ]
        ]
    ];

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

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);
}