【问题标题】:How to take zero from the decimal part?如何从小数部分取零?
【发布时间】:2011-07-22 12:30:59
【问题描述】:

我有一个场景,我正在将数字转换为单词,并且我已经成功了,但是我发现了一个无法正常工作的场景。如果我输入数字为“10”,它会显示“10”。此外,“10.2”将显示“十点二”。但是,如果我输入“10.0”,它将不会显示为“十点零”。

为了将整数部分与小数部分分开,我通常用'.'来分割数字,但如果我输入像“10.0”这样的数字,则字符串数组将只包含“10”而不是“0

我做过的吐槽部分如下:

string[] number = Convert.ToString(context.NumberToTranslate).Split('.');

【问题讨论】:

  • NumberToTranslate 的类型是什么?
  • 请务必使用 Decimal.TryParse() 将您的输入转换为数字。 Decimal 类型保留尾随零。如果 NumberToTranslate 是 double 类型,则没有解决方案。

标签: c#


【解决方案1】:

要测试您的数字是否为不带小数点的整数,您可以尝试使用

对其进行解析
int tmpInt;
bool isInteger = Int32.TryParse(num.ToString(), out tmpInt);

如果它是一个整数,只需将数字转换为您的字符串表示形式,否则无论使用自定义格式字符串如何,都保留小数点后的数字:

 string number = num.ToString("#.0");

如果您的数字小于 1,也会出现同样的问题,因此您也可以将零占位符用于小数点前的数字:

 string number = num.ToString("#0.0");

另见Custom Numeric Format Strings

【讨论】:

  • 但这仅适用于小数点后的 1 位数字,而不是更多......就像(10.01).ToString("#.0") 只会给10.0 ......所以不是完美的解决方案。它也会进行四舍五入
  • @Shekar_Pro:是的,我想您必须知道要使用多少位数,这是一个缺点
【解决方案2】:

如果数字,即使数字是浮点数或双精度数,实际上点后的数字也会丢失。 解决方法是对这些数字使用 decimal 类型,它保留小数点后的 0

例子:

Console.WriteLine(Convert.ToString(10.0M));

输出:

10.0

【讨论】:

    【解决方案3】:

    费宾:

    这似乎是一个操作顺序问题。尝试在转换之前进行拆分”

    var parts = ("10.0").Split('.'); //or context.NumberToTranslate
    
    parts[0] //"10"
    parts[1] //"0"
    
    //Convert
    string[] number = Convert.ToString(parts);
    

    您不必完全分解它,但我这样做是为了表明您可以拆分“10.0”,然后然后用它做你想做的事。

    【讨论】:

    • 您已经将数字作为字符串,所以显然拆分会起作用..但是这里 OP 使用的是实数并将其转换为字符串进行拆分。
    【解决方案4】:

    您可以做的一件事是将您的数字与自身转换为整数进行比较,以确定是否需要将零附加到您正在生成的字符串中。

    类似的东西:

    var n = 10.0f;
    if(n == (int)n) {
       Console.WriteLine("zero"); 
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2017-09-22
      相关资源
      最近更新 更多