我想要一个传递整数的函数,如果该整数超过某个值(在我当前的情况下是1000),我想对它执行一些除法,这样我最终可以返回原始整数的缩写。 / p>
例如:
1000 = 1
1001 = 1
1099 = 1
1100 = 1.1
1199 = 1.1
1200 = 1.2
10000 = 10
10099 = 10
10100 = 10.1
这是导致我出现问题的事情的分裂和四舍五入。
给我上述结果的最合适的方法是什么?
答案 0 :(得分:6)
怎么样:
int dividedBy100 = x / 100; // Deliberately an integer division
decimal dividedBy1000 = dividedBy100 / 10m; // Decimal division
string result = dividedBy1000.ToString();
我建议您使用decimal
而不是float
或double
,因为您基本上希望十进制除以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)
您的示例似乎暗示您只需要一个小数位的精度,那么如何做到这样:
第一个分区将截断任何小于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#等效格式)。