我有一个senario,我将数字转换为单词并且我已经成功了,但是我找到了一个不起作用的场景。如果我输入的数字为“ 10 ”,则会显示“十”。此外,“ 10.2 ”将显示“十点二”。但是,如果我输入“ 10.0 ”,则不会显示为“十点零”。
为了从小数部分中分离整数部分,我通常将数字除以'。',但如果输入“ 10.0 ”之类的数字,则字符串数组只包含“ 10 ”而不包含“ 0 ”
我所做的随地吐痰部分如下:
string[] number = Convert.ToString(context.NumberToTranslate).Split('.');
答案 0 :(得分:5)
要测试你的数字是否为小数点整数,你可以尝试用
解析它int tmpInt;
bool isInteger = Int32.TryParse(num.ToString(), out tmpInt);
如果是整数,只需将数字转换为字符串表示,否则保留小数点后的数字,无论使用自定义格式字符串是什么:
string number = num.ToString("#.0");
如果您的数字小于1,则会出现同样的问题,因此您也可以使用零占位符来表示小数点前的数字:
string number = num.ToString("#0.0");
答案 1 :(得分:3)
实际上,如果数字,点数会丢失,即使我的数字是Float或Double。 解决方案是对这些数字使用十进制类型,在十进制之后保留0 。
示例:
Console.WriteLine(Convert.ToString(10.0M));
输出:
10.0
答案 2 :(得分:2)
Febin:
这似乎是一个操作顺序问题。尝试在转换“
之前进行拆分var parts = ("10.0").Split('.'); //or context.NumberToTranslate
parts[0] //"10"
parts[1] //"0"
//Convert
string[] number = Convert.ToString(parts);
你不必彻底打破它,但我这样做是为了表明你可以拆分“10.0”和然后用它做你想做的事。
答案 3 :(得分:2)
您可以做的一件事就是将您的数字与自身的数字进行比较,以确定是否需要将零添加到您正在生成的字符串中。
有些事情:
var n = 10.0f;
if(n == (int)n) {
Console.WriteLine("zero");
}