如果小数为零则忽略,但如果非零,则读取前两位

时间:2018-05-29 19:13:05

标签: c#

如果小数为零,则忽略但不为零,需要读入前两个

"35.0" or "35.0000" = 35
"35.0193" = 35.01
"35.98759" = 35.98

有什么想法吗?

var splitSku4 = value.Split('.');
if (splitSku4.Length > 1)
{
    if (!splitSku4[1].StartsWith("0") || !splitSku4[1].StartsWith("00"))
    {
        sku4 = string.Format("{0}.{1}", splitSku4[0], splitSku4[1].Substring(0, 2));
    }
}

此时陷入困境

2 个答案:

答案 0 :(得分:0)

如果您的字符串包含数值,则可以使用其中一种Convert方法(例如Convert.ToDouble)或使用与目标数据类型关联的Parse或TryParse方法之一进行转换(例如Double.Parse)。

示例:

var input = "35.98759";
var number = double.Parse(input);

或者

var number = Convert.ToDouble(input);

如果您将值存储在数字数据类型中,则可以使用Math.Round删除最低有效数字

var input = "35.98759";
var number = double.Parse(input);
var numberToTwoDecimals = Math.Round(number, 2);

如果你总是想要向下舍入,有几种方法可以做到,但在这种情况下最简单的方法是在舍入数字之前减去0.005。

var result = Math.Round(number - 0.005F, 2);

删除小数后,如果需要,可以转换回字符串:

var outputString = result.ToString("0.00");

结果:

35.98

Example code on DotNetFiddle

答案 1 :(得分:0)

另一种方法:

var number = 2.56832;
string newnumber = string.Format("{0:0.00}", number )); // formats to 2 decimal places
string[] split = newnumber.Split('.'); //split and remove '.'

if(Convert.ToInt16(split[1]) == 0){ //convert second index to number
    var final = split[0];
}else{
    var final = newnumber;
}

或一行:

var number = 2.56832;
string newnumber = string.Format("{0:0.00}", number )); 
string[] split = newnumber.Split('.'); //split and remove '.'

var final = Convert.ToInt16(split[1]) == 0 ? split[0] : newnumber;