将字符串格式化为1个小数位,不向上/向下舍入

时间:2011-09-05 17:34:45

标签: c# string

我想要一个传递整数的函数,如果该整数超过某个值(在我当前的情况下是1000),我想对它执行一些除法,这样我最终可以返回原始整数的缩写。 / p>

例如:

1000 = 1
1001 = 1
1099 = 1
1100 = 1.1
1199 = 1.1
1200 = 1.2
10000 = 10
10099 = 10
10100 = 10.1

这是导致我出现问题的事情的分裂和四舍五入。

给我上述结果的最合适的方法是什么?

8 个答案:

答案 0 :(得分:6)

怎么样:

int dividedBy100 = x / 100; // Deliberately an integer division
decimal dividedBy1000 = dividedBy100 / 10m; // Decimal division
string result = dividedBy1000.ToString();

我建议您使用decimal而不是floatdouble,因为您基本上希望十进制除以10。

答案 1 :(得分:0)

根据定义,缩写是圆形的。

如果您正在寻找更高精度,为什么不使用Double而不是Integer?

答案 2 :(得分:0)

如果t是原始数字,那么

int a=t/100

float b=a/10

b应该包含你的答案

更多代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                string s;
                s = Console.ReadLine();
                int a = Convert.ToInt32(s);
                a = a / 100;
                float b = a / (float)10.0;
                Console.WriteLine(b);
            }
        }
    }
}

答案 3 :(得分:0)

这是一个建议

double function(int number)
{
    if (number >= 1000)
    {
       return (((double)number) / 1000);
    }

}

答案 4 :(得分:0)

int MyNumber = 10100;

string MyString = ((int) MyNumber/1000).ToString() + (( MyNumber % 1000) > 99 ? "." + (((int)( MyNumber / 100 )) % 10).ToString() : "");

答案 5 :(得分:0)

您的示例似乎暗示您只需要一个小数位的精度,那么如何做到这样:

  1. 除以100
  2. 投射到双(或浮动)
  3. 除以10
  4. 第一个分区将截断任何小于100的尾随数字(相当于100个基本的底层函数),然后转换为double并除以10将得到您想要的单个小数位数。

答案 6 :(得分:0)

你应该使用模数(余数)数学来做到这一点。您不需要涉及FPU(浮点单元)。

static string RoundAndToString(int value, int denominator)
{
    var remainder = value % denominator;
    value = (value - remainder) / denominator;
    if (remainder == 0)
        return value.ToString();
    remainder = (remainder * 10) / denominator;
    return string.Format("{0}{1}{2}", value, CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator, remainder);
}

答案 7 :(得分:0)

由于您只想截断数字,因此将其转换为字符串是有意义的,从字符串中删除最后两个字符,然后除以10得到相应的数字。

这是Ruby中的算法。 (我没有C#方便)

a = 1000 #sample number
 -> 1000

b = a.to_s[0..-3] #a converted to a string, then taking all characters except the last two.
 -> "10"

c = b.to_i / 10.0 # converts to float in correct power
 -> 1.0

然后使用sprintf以任何格式显示“c”(或使用FormatNumber以C#等效格式)。