我该如何在程序中做到这一点?数学问题

问题描述:

我在尝试制作一个转换数值的泛型方程。这里有些例子。我该如何在程序中做到这一点?数学问题

9,873,912 -> 9,900,000 
125,930 -> 126,000 
2,345 -> 2,400 
280 -> 300 
28 -> 30 
In general, x -> n 

基本上,我正在制作一个图表,我想让数值看起来更好。如果是6位数或更高的数字,则应该至少有3个零。如果是4位数或更少,则至少应有2位数字,除非是2位数字,否则1为零。

(忽略逗号,它们只是帮助阅读示例)。无论如何,我想将一个值x转换为这个新值n。什么是g(x)等于n

这是一个Objective-C程序(iPhone应用程序)。

+0

我的意思是你所描述的一切,听起来像是你可以写你的自我。 – zellio

+0

不,因为我不知道如何做舍入... – CodeGuy

+0

查找'有意义的数字'(有时称为“有效数字”。) –

Ahhh四舍五入在编程上总体上有些尴尬。我想建议的是除以十的力量,诠释和乘以返回。效率不高,但会起作用。可能有一个库可以在Objective-C中做到这一点,但我不知道。

if (x is > 99999) { 
    x = ((int)x/1000) * 1000; 
} 
else if (x > 999) { 
    x = ((int) x/100) * 100; 
} 
else if (x > 9) { 
    x = ((int) x/10) * 10; 
} 
+0

非常感谢! – CodeGuy

+0

这可行,但洛特的答案是头等舱。值得研究,特别是'int(log10(n)) - 1', –

+0

是的,我和Tim Kemp就此合作。 S.Lott比我有更“正确的”答案。理解/利用它将是一个好的整体。 – zellio

划分,截断和相乘。

10**x * int(n/10**(x-d)) 

什么是“x”?在你的例子中,它是关于int(log10(n))-1

什么是“d”?这是有效位数。 2或3.

+0

+1 ... int(log10(n)) - 1在这里是关键。 – Steve

+0

是的,+1为广义公式。 – zellio

使用标准C函数,如round()或roundf()...在命令行尝试man round,根据数据类型的不同,有几个不同的选项。你可能会想通过以适当的数量划分,然后用相同数量的结果乘以第一缩放值,是这样的:

int roundedValue = round(someNumber/scalingFactor) * scalingFactor; 
+0

非常感谢!完善。 – CodeGuy