1

I want to check if a decimal has a value in the 4th significant figure.

//3 Significant figures
var val = 1.015;

//4 Significant figures
var val2 = 1.0155;

How can I test to see when there is a value in the 4th significant place.

I want to conditionaly display 3 or 4 decimal places depending if there is a non zero value in the 4th place.

What is the best way to do this?

Would this method work?

if((val * 10000) % 10 != 0) ...
4

4 回答 4

1

您可以使用自定义格式字符串执行此操作:

double d = 1.2340;
string strDouble = d.ToString("0.000#");
于 2013-11-26T00:27:37.037 回答
1

1.将值乘以1000,然后做(value%10)mod10以获得3rd significantvalue 的最后一位。

示例:(第三位重要)

        var val = 1.015;
        int val1=Convert.ToInt32(val * 1000);
        Console.WriteLine(val1 %10); 

Output: 5

2.将值乘以10000然后做(value%10)mod10以获得4 significant值的最后一位

示例:(第 4 位重要)

        var val = 1.0157;
        int val1=Convert.ToInt32(val * 10000);
        Console.WriteLine(val1 %10);

Output: 7
于 2013-11-26T00:15:51.927 回答
1

要了解有关格式化输出的信息,请查看http://msdn.microsoft.com/en-us/library/kfsatb94(v=vs.110).aspx

要检查是否有 4 个或更多有效数字,您可以执行

 if (inputString.Split('.')[1].Length > 3)

当然,这并没有做任何错误检查,很容易抛出一些异常,但不需要用一些基本的界限和空值检查来混淆我的答案。

于 2013-11-26T00:16:16.263 回答
0

愚蠢的答案是:找到.字符串中的位置,然后检查位置+4。

更严重的是,看看双格式选项:)

你可以使用这种双精度格式

//       using the   F4:                    1054.3224

然后如果您的字符串的最后一个索引是 0,则使用子字符串将其删除。


在您上次编辑时(if((val * 10000) % 10 != 0) ...),是的,它应该可以工作...... Sudhakar 在他的回答中提出了同样的建议。

您可能应该采用您使用的任何解决方案,并将其放入返回 int 的辅助方法中,然后您可以在代码中使用它,帮助您提高可读性和可重用性:)


使用 Marks 解决方案,我猜是最简单的。

double d = 3.40;
Console.Out.WriteLine("d 0.0: {0}", d);                     // 3.4
Console.Out.WriteLine("d 0.0: {0}", d.ToString("0.0"));     // 3.4
Console.Out.WriteLine("d 0.00: {0}", d.ToString("0.00"));   // 3.40
Console.Out.WriteLine("d 0.0#: {0}", d.ToString("0.0#"));   // 3.4

请注意,如果您所拥有的只是 3 或 4 之后的数字.,则默认值将被截断并删除,您可以看到上面的第一个输出。

于 2013-11-26T00:14:20.717 回答