简体   繁体   English

将多个浮点值汇总为新的浮点(双精度值)

[英]Summing multiple float values into a new float (Double values)

How can I sum multiple doubleValues into a new double? 如何将多个doubleValue求和成一个新的double? At the moment I have tried like this: 目前,我已经尝试过这样:

double sum = doubleWantToSum1 + doubleWantToSum2 + doubleWantToSum; //etc...

And further, I want to use the result for this equation in 此外,我想将结果用于此等式

double tooMuch = sum - 100;

Which I want to return 100 minus the total value of my floats. 我要返回100减去浮动金额的总和。 At the moment the only thing this does is to output doubleWantToSum1 - 100. I believe the answer to this rediciously simple, but since I could not find anything on the internet about this I would love it if one of you guys told me. 目前,唯一要做的就是输出doubleWantToSum1-100。我相信答案很简单,但是由于我在互联网上找不到任何关于此的答案,如果你们中的一个告诉我,我会喜欢的。

EDIT, ADDED CODE Note, I know this is poor and probably uneffective. 编辑,添加代码注意,我知道这很糟糕,可能无效。

//Nummerformatterere - Kinda unødvendig
NSNumberFormatter *fmt1  =  [NSNumberFormatter new]; //Temp
NSNumberFormatter *fmt2  =  [NSNumberFormatter new]; //Methane
NSNumberFormatter *fmt3  =  [NSNumberFormatter new]; //Ethane
NSNumberFormatter *fmt4  =  [NSNumberFormatter new]; //Propane
NSNumberFormatter *fmt5  =  [NSNumberFormatter new]; //n-butane
NSNumberFormatter *fmt6  =  [NSNumberFormatter new]; //i-butane
NSNumberFormatter *fmt7  =  [NSNumberFormatter new]; //n-petane
NSNumberFormatter *fmt8  =  [NSNumberFormatter new]; //i-petane
NSNumberFormatter *fmt9  =  [NSNumberFormatter new]; //n-hexane
NSNumberFormatter *fmt10 =  [NSNumberFormatter new]; //nitrogen
NSNumberFormatter *fmt11 =  [NSNumberFormatter new]; //oxygen

//Float for å få textfieldsene til nummer
double temprature = [fmt1  numberFromString: tempratureText.text].doubleValue;
double methane    = [fmt2  numberFromString: methaneText.text   ].doubleValue;
double ethane     = [fmt3  numberFromString: ethaneText.text    ].doubleValue;
double propane    = [fmt4  numberFromString: propaneText.text   ].doubleValue;
double nbutane    = [fmt5  numberFromString: nbutaneText.text   ].doubleValue;
double ibutane    = [fmt6  numberFromString: ibutaneText.text   ].doubleValue;
double npetane    = [fmt7  numberFromString: npetaneText.text   ].doubleValue;
double ipetane    = [fmt8  numberFromString: ipetaneText.text   ].doubleValue;
double nhexane    = [fmt9  numberFromString: nhexaneText.text   ].doubleValue;
double nitrogen   = [fmt10 numberFromString: nitrogenText.text  ].doubleValue;
double oxygen     = [fmt11 numberFromString: oxygenText.text    ].doubleValue;

//Floats og formatters for underflow, overflow
double sum = (methane + ethane + propane + nbutane + ibutane + npetane + ipetane + nhexane + nitrogen + oxygen);
double overflowPart = 100 - sum;
double underflowPart = sum - 100;

NSNumber *underFlow = [[NSNumber alloc]initWithDouble:underflowPart];
NSNumberFormatter *underFlowResult = [[NSNumberFormatter alloc] init];
underFlowResult.numberStyle = NSNumberFormatterDecimalStyle;
[underFlowResult setNumberStyle:NSNumberFormatterDecimalStyle];
[underFlowResult setMaximumFractionDigits:2];
NSString *formattedUnderFlow = [underFlowResult stringFromNumber:(NSNumber*)underFlow];

NSNumber *overFlow = [[NSNumber alloc]initWithDouble:underflowPart];
NSNumberFormatter *overFlowResult = [[NSNumberFormatter alloc] init];
overFlowResult.numberStyle = NSNumberFormatterDecimalStyle;
[overFlowResult setNumberStyle:NSNumberFormatterDecimalStyle];
[overFlowResult setMaximumFractionDigits:2];

NSString *formattedOverFlow = [overFlowResult stringFromNumber:(NSNumber*)overFlow];

//Floats for variabler til ligningen
double Xi = 1;
double Mi = 2;
double Vi = 3;
double Vc = 4;

//Ligningen for å regne ut density
double over1 = Xi * Mi;
double under1 = Xi * Vi - Vc;

//=RESULT=
double result =  over1 / under1;

/*----------STREK FORDI DET ER CHILL OG JEG ER FERDIG MED FLOATER----------*/

NSString *resultString = [[NSString alloc]initWithFormat:@"D = %f", result];
NSString *overflowString = [[NSString alloc]initWithFormat:@"Total %@ greater than 100 %", formattedOverFlow ];
NSString *underflowString = [[NSString alloc]initWithFormat:@"Total %@ less than 100 %", formattedUnderFlow];

/*----------STREK FORDI DET ER CHILL OG JEG ER FERDIG MED STRINGS----------*/
/*
if (temprature == 0 || methane == 0 || ethane == 0 || propane == 0 || nbutane == 0 || ibutane == 0 || oxygen == 0 || npetane == 0 || ipetane == 0 || nhexane == 0 || nitrogen == 0)
{
    outputText.text = @"Please enter all values";
} */
if (underflowPart == 100)
{
    outputText.text = @"Start by entering values above";
}
if (sum == 100)
{
    outputText.text = resultString;
}

if (sum > 100)
{
    outputText.text = overflowString;
}

if (sum < 100)
{
    outputText.text = underflowString;
}
/*----------STREK FORDI DET ER CHILL OG JEG ER FERDIG MED 'if'----------*/

It may depend on how large (how much precision) the numbers have that you are adding. 这可能取决于您要添加的数字的大小(精度)。 In order to get around this, you can use NSDecimalNumber , which will hold up to 38 decimal digits of precision. 为了解决这个问题,您可以使用NSDecimalNumber ,它最多可以保留38位十进制数字。

It has not yet been explicitly said in the comments that the way you are summing the numbers in your code is correct. 注释中尚未明确指出,您对代码中的数字求和的方式是正确的。 What the comments are implying is that the numbers you are summing are wrong, and you should log them to see what they are. 这些注释所隐含的含义是,您求和的数字是错误的,因此应记录它们以了解它们的含义。

As well, you could save some code (eliminate your number formatters) by using: 同样,您可以使用以下方法保存一些代码(消除数字格式化程序):

double temprature = [tempratureText.text doubleValue];

instead of 代替

double temprature = [fmt1  numberFromString: tempratureText.text].doubleValue;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM