Improve error messages around PI and other numbers with unknown units (#7457)
* Improve docs around PI Signed-off-by: Nick Cameron <nrc@ncameron.org> * Refactor and polish type error messages Signed-off-by: Nick Cameron <nrc@ncameron.org> * Add suggestion to fix unknown numbers error Signed-off-by: Nick Cameron <nrc@ncameron.org> * Don't warn so often about unknown units Signed-off-by: Nick Cameron <nrc@ncameron.org> --------- Signed-off-by: Nick Cameron <nrc@ncameron.org>
This commit is contained in:
		| @ -46,3 +46,7 @@ KCL has no support for area, volume, or other higher dimension units. When inter | ||||
| ## Explicit conversions | ||||
|  | ||||
| You might sometimes need to convert from one unit to another for some calculation. You can do this implicitly when calling a function (see above), but if you can't or don't want to, then you can use the explicit conversion functions in the [`std::units`](/docs/kcl-std/modules/std-units) module. | ||||
|  | ||||
| KCL cannot know about changes to units caused by arithmetic. For example, you may intend for `10in * 25.4` to be the value `254mm` (i.e., `10in` in mm), however, the result of that computation in KCL is `254in`. It is always better to rely on automatic conversion or to use the explicit conversion functions, where possible. | ||||
|  | ||||
| Converting between degrees and radians using π ([`PI`](/docs/kcl-std/consts/std-math-PI) in KCL) is especially prone to this error and so the `PI` constant always requires specifying units of any computation it is used with. E.g., `radius = (circumference / (2 * PI)): number(mm)`. | ||||
|  | ||||
| @ -16,8 +16,8 @@ However, `PI` is nearly always used for converting between different units - usu | ||||
| from radians. Therefore, `PI` is treated a bit specially by KCL and always has unknown units. This | ||||
| means that if you use `PI`, you will need to give KCL some extra information about the units of numbers. | ||||
| Usually you should use type ascription on the result of calculations, e.g., `(2 * PI): number(rad)`. | ||||
| You might prefer to use `units::toRadians` or `units::toDegrees` to convert between angles with | ||||
| different units. | ||||
| It is better to use `units::toRadians` or `units::toDegrees` to convert between angles with | ||||
| different units where possible. | ||||
|  | ||||
| ### Examples | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user